Ankündigung

Einklappen
Keine Ankündigung bisher.

DHCP Datei ändern

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • #46
    Zitat von David Beitrag anzeigen
    Du kannst auch sudo verwenden und damit der "Webserver-uid" erlauben ein bestimmtes (shell-)Skript mit den erforderlichen Rechten aufzurufen. Und dieses Skript macht nur genau eine Sache: Datei /pfad1/x nach /pfad2/y kopieren, ohne Parameter, alles hardcoded.
    Den Vorschlag habe ich ihm auch schon gemacht

    Kommentar


    • #47
      Stimmt, ich habe dem Kind nur noch einen Namen gegeben
      sudo - Wikipedia, the free encyclopedia

      Kommentar


      • #48
        Hmm kann mir vll jemand erklären warum er alles in eine zeile schreibt und nicht in die jeweilge Zeile des arrays die ich bestimmt habe?

        Und schreibt er eigentlich die komplette Zeile neu oder fügt er bei diesem Befehl nur ein? Kann man ihn die ganze Zeile neus chreiben lassen? Dat wäre subba.


        PHP-Code:
        <?php
         
          
        //Variablen mit Inhalt aus dem Formular füllen.

          
        $subnet $_POST["subnet"];
          
        $start_adress $_POST["start_adress"];
          
        $end_adress $_POST["end_adress"];
          
        $subnetmask $_POST["subnetmask"];
          
        $gateway $_POST["gateway"];
          
        $default_lease_time $_POST["default_lease_time"];
          
        $max_lease_time $_POST["max_lease_time"];
          
        $domain $_POST["domain"];
          
        $primary_dns $_POST["primary_dns"];
          
        $secondary_dns $_POST["secondary_dns"];

          
          
        // DHCPD.CONF in ein array speichern um es später zu bearbeiten zu können [mixed ...]
          
        $array file('/etc/dhcpd.conf');

          
        // 7 deswegen weil Zeile eins als Zeile null gelesen wird
          // DHCP bearbeiten und bestimmte Zeilen neu schreiben
          
        $array[7] = "subnet ".$subnet." netmask ".$subnetmask." {";
          
        $array[10] = "range ".$start_adress." ".$end_adress.";";
          
        $array[13] = "option subnet-mask ".$subnetmask.";";
          
        $array[16] = "option domain-name ".$domain.";";
          
        $array[19] = "default-lease-time ".$default_lease_time.";";
          
        $array[22] = "max-lease-time ".$max_lease_time.";";
          
        $array[25] = "option routers ".$gateway.";";
          
        $array[28] = "option domain-name-servers ".$primary_dns."; ".$secondary_dns." {";
          
          
        // DHCPD.CONF speichern und schließen
          
        file_put_contents('/etc/dhcpd.conf',$array); 

        ?>

        Kommentar


        • #49
          PHP: file_put_contents - Manual
          You can also specify the data parameter as a single dimension array. This is equivalent to file_put_contents($filename, implode('', $array)).
          implode('' und nicht implode("\r\n"
          file() liest auch die Zeilenumbrüche mit ein. Aber für die Zeilenumbrüche der von Dir erstellten Elemente musst Du selbst sorgen.
          Dass Du Dich auf die Zeilennummer bei den Optionen verlässt, halte ich für riskant, gewagt.

          Kommentar


          • #50
            Geschickte Alternativ möglichkeiten?

            Wie kann man den Files mit selbst erstellten Zeichenumbrüchen so einlesen das die Umbrüche bestehen bleiben?

            Kommentar


            • #51
              Zitat von Templerschaf Beitrag anzeigen
              Geschickte Alternativ möglichkeiten?

              Wie kann man den Files mit selbst erstellten Zeichenumbrüchen so einlesen das die Umbrüche bestehen bleiben?
              Hat er dir eigentlich schon gesagt, aber hier ein Beispiel:

              $array[13] = "option subnet-mask ".$subnetmask.";\r\n";

              [edit]
              Und wenn du dich nicht auf die Zeilennummern verlassen willst wird das ganze komplizierter. Hier könntest du dann file_get_contents benutzen, das schreib dir die Datei in einen String anstatt des Array und du kannst darüber dann verschiedene Stringfunktionen und/oder reguläre Ausdrücke laufen lassen.

              Kommentar


              • #52
                Geht das? Das er ein # vor die Zeile macht wenn im Formular bei der Domaine nichts drin steht?

                Da muss ich mit if arbeiten oder? Aber wie mach ich es wenn er mehrer Variablen prüfen soll?

                Kann ich da schrieben

                If ( $test $test1 $test2 == " ")

                Kommentar


                • #53
                  Zitat von Templerschaf Beitrag anzeigen
                  Kann ich da schrieben

                  If ( $test $test1 $test2 == " ")
                  wenn schon dann

                  if($test == " " && $test1 == " " && $test2 == " ")

                  aber damit prüfst du ob in der Variable ein Leerzeichen steht, das ist ja nicht dein Ziel oder? Ob eine Variable nichts enthält prüfst du mit

                  if(empty($test))

                  Wenn du dann noch sichergehen willst das kein leerzeichen eingegeben wurde benutzt du noch trim(), das schneidet Leerzeichen am Anfang und Ende eines Strings ab.

                  if(empty(trim($test)))

                  und mehrere Bedingungen verknüpfst du mit && für UND oder || für ODER

                  Kommentar


                  • #54
                    Danke dafür... sowas hab ich gesucht. Werd das gleich mal ausprobieren.

                    Müsste dann so gehn oder?

                    if(empty(trim($subnet)) && empty(trim($start_adress)) && empty(trim($subnet)) && empty(trim($subnet)))

                    Kommentar


                    • #55
                      Zitat von Templerschaf Beitrag anzeigen
                      Geschickte Alternativ möglichkeiten?
                      Auf Anhieb nicht. Normalerweise und wenn möglich würde ich mir den Code zum Parsen vom Original "ausleihen". Das scheint hier aber nicht so einfach möglich zu sein.

                      Kommentar


                      • #56
                        Stimmt das dann so?

                        PHP-Code:
                        if(empty(trim($subnet)) || empty(trim($start_adress)) || empty(trim($end_adress)) || empty(trim($subnetmask)) || empty(trim($gateway)) || empty(trim($default_lease_time)) || empty(trim($max_lease_time)) || empty(trim($domain)) || empty(trim($primary_dns)) || empty(trim($secondary_dns)))
                            {
                          
                        $array[6] = "#subnet ".$subnet." netmask ".$subnetmask." {\r\n";
                          
                        $array[9] = "#range ".$start_adress." ".$end_adress.";\r\n";
                          
                        $array[12] = "#option subnet-mask ".$subnetmask.";\r\n";
                          
                        $array[15] = "#option domain-name ".$domain.";\r\n";
                          
                        $array[18] = "#default-lease-time ".$default_lease_time.";\r\n";
                          
                        $array[21] = "#max-lease-time ".$max_lease_time.";\r\n";
                          
                        $array[24] = "#option routers ".$gateway.";\r\n";
                          
                        $array[27] = "#option domain-name-servers ".$primary_dns.", ".$secondary_dns.";\r\n";
                            }
                          else
                            {
                             
                        // 7 deswegen weil Zeile eins als Zeile null gelesen wird
                          // DHCP bearbeiten und bestimmte Zeilen neu schreiben
                          
                        $array[6] = "subnet ".$subnet." netmask ".$subnetmask." {\r\n";
                          
                        $array[9] = "range ".$start_adress." ".$end_adress.";\r\n";
                          
                        $array[12] = "option subnet-mask ".$subnetmask.";\r\n";
                          
                        $array[15] = "option domain-name ".$domain.";\r\n";
                          
                        $array[18] = "default-lease-time ".$default_lease_time.";\r\n";
                          
                        $array[21] = "max-lease-time ".$max_lease_time.";\r\n";
                          
                        $array[24] = "option routers ".$gateway.";\r\n";
                          
                        $array[27] = "option domain-name-servers ".$primary_dns.", ".$secondary_dns.";\r\n";
                            } 

                        Kommentar


                        • #57
                          Zitat von Templerschaf Beitrag anzeigen
                          Stimmt das dann so?

                          PHP-Code:
                          if(empty(trim($subnet)) || empty(trim($start_adress)) || empty(trim($end_adress)) || empty(trim($subnetmask)) || empty(trim($gateway)) || empty(trim($default_lease_time)) || empty(trim($max_lease_time)) || empty(trim($domain)) || empty(trim($primary_dns)) || empty(trim($secondary_dns)))
                              {
                            
                          $array[6] = "#subnet ".$subnet." netmask ".$subnetmask." {\r\n";
                            
                          $array[9] = "#range ".$start_adress." ".$end_adress.";\r\n";
                            
                          $array[12] = "#option subnet-mask ".$subnetmask.";\r\n";
                            
                          $array[15] = "#option domain-name ".$domain.";\r\n";
                            
                          $array[18] = "#default-lease-time ".$default_lease_time.";\r\n";
                            
                          $array[21] = "#max-lease-time ".$max_lease_time.";\r\n";
                            
                          $array[24] = "#option routers ".$gateway.";\r\n";
                            
                          $array[27] = "#option domain-name-servers ".$primary_dns.", ".$secondary_dns.";\r\n";
                              }
                            else
                              {
                               
                          // 7 deswegen weil Zeile eins als Zeile null gelesen wird
                            // DHCP bearbeiten und bestimmte Zeilen neu schreiben
                            
                          $array[6] = "subnet ".$subnet." netmask ".$subnetmask." {\r\n";
                            
                          $array[9] = "range ".$start_adress." ".$end_adress.";\r\n";
                            
                          $array[12] = "option subnet-mask ".$subnetmask.";\r\n";
                            
                          $array[15] = "option domain-name ".$domain.";\r\n";
                            
                          $array[18] = "default-lease-time ".$default_lease_time.";\r\n";
                            
                          $array[21] = "max-lease-time ".$max_lease_time.";\r\n";
                            
                          $array[24] = "option routers ".$gateway.";\r\n";
                            
                          $array[27] = "option domain-name-servers ".$primary_dns.", ".$secondary_dns.";\r\n";
                              } 
                          sieht von der Syntax her ok aus, aber ist das auch das was du willst? jetzt macht er sobald eine einzige variable leer ist vor den kompletten block in jeder einzelnen zeile eine #

                          Kommentar


                          • #58
                            Oh merde.... stimmt ja. Ne das will ich natürlich nicht. Aber irgendwas stimmt mit dem if nicht weil ich eine Fehlermeldung beim öffnen des Dokumentes bekomme.


                            Fatal error: Can't use function return value in write context in /var/www/vpn/dhcp.php on line 19


                            Hmm... geht das überhaupt mit einer if - abfrage?

                            Ist es dann sinnvoller wenn ich für jede variable eine if abfrage mache?

                            Kommentar


                            • #59
                              Argh sorry mein Fehler, steht auch ganz dick im Manual...

                              Zitat von http://de2.php.net/manual/de/function.empty.php
                              Hinweis: empty() überprüft nur Variablen, alles andere führt zu einem Parse-Error. Anders gesagt wird folgendes nicht funktionieren: empty(trim($name)).
                              Also

                              if(trim($test) == "")

                              und JA ich denke für das was du vorhast wirst du um ein if für jede Zeile nicht herum kommen

                              Kommentar


                              • #60
                                Geht das so?

                                Weil ich hab bei manchen auch wieder zwei sachen ins if geschrieben.

                                PHP-Code:
                                <?php
                                 
                                  
                                //Variablen mit Inhalt aus dem Formular füllen.

                                  
                                $subnet $_POST["subnet"];
                                  
                                $start_adress $_POST["start_adress"];
                                  
                                $end_adress $_POST["end_adress"];
                                  
                                $subnetmask $_POST["subnetmask"];
                                  
                                $gateway $_POST["gateway"];
                                  
                                $default_lease_time $_POST["default_lease_time"];
                                  
                                $max_lease_time $_POST["max_lease_time"];
                                  
                                $domain $_POST["domain"];
                                  
                                $primary_dns $_POST["primary_dns"];
                                  
                                $secondary_dns $_POST["secondary_dns"];

                                  
                                // DHCPD.CONF in ein array speichern um es später zu bearbeiten zu können [mixed ...]
                                  
                                $array file('/etc/dhcpd.conf');

                                if(
                                trim($subnet) == "")
                                    {
                                  
                                $array[6] = "#subnet ".$subnet." netmask ".$subnetmask." {\r\n";
                                    }
                                    else
                                    {
                                  
                                $array[6] = "subnet ".$subnet." netmask ".$subnetmask." {\r\n";
                                    }
                                  
                                    
                                ///////////////////////////////////////////  
                                  
                                if(trim($start_adress) == "" || trim($end_adress) == "")
                                    {
                                  
                                $array[9] = "#range ".$start_adress." ".$end_adress.";\r\n";
                                    }
                                    else
                                    {
                                  
                                $array[9] = "range ".$start_adress." ".$end_adress.";\r\n";
                                    }
                                    
                                     
                                /////////////////////////////////////////// 
                                  
                                if(trim($subnetmask) == "")
                                    {
                                  
                                $array[12] = "#option subnet-mask ".$subnetmask.";\r\n";
                                    }
                                    else
                                    {
                                  
                                $array[12] = "option subnet-mask ".$subnetmask.";\r\n";
                                    }
                                    
                                      
                                ///////////////////////////////////////////
                                  
                                if(trim($gateway) == "")
                                    {
                                  
                                $array[24] = "#option routers ".$gateway.";\r\n";
                                    }
                                    else
                                    {
                                  
                                $array[24] = "option routers ".$gateway.";\r\n";
                                    }
                                        
                                ///////////////////////////////////////////
                                    
                                if(trim($default_lease_time) == "")
                                    {
                                  
                                $array[18] = "#default-lease-time ".$default_lease_time.";\r\n";
                                    }
                                    else
                                    {
                                  
                                $array[18] = "default-lease-time ".$default_lease_time.";\r\n";
                                    }
                                    
                                ///////////////////////////////////////////
                                    
                                if(trim($max_lease_time) == "")
                                    {
                                   
                                $array[21] = "#max-lease-time ".$max_lease_time.";\r\n";
                                    }
                                    else
                                    {
                                   
                                $array[21] = "max-lease-time ".$max_lease_time.";\r\n";
                                    }
                                  
                                     
                                ///////////////////////////////////////////
                                    
                                if(trim($domain) == "")
                                    {
                                  
                                $array[15] = "#option domain-name ".$domain.";\r\n";
                                    }
                                    else
                                    {
                                  
                                $array[15] = "option domain-name ".$domain.";\r\n";
                                    } 
                                  
                                     
                                ///////////////////////////////////////////
                                    
                                if(trim($primary_dns) == "" || trim($secondary_dns) == "")
                                    {
                                  
                                $array[27] = "#option domain-name-servers ".$primary_dns.", ".$secondary_dns.";\r\n";
                                    }
                                    else
                                    {
                                  
                                $array[27] = "option domain-name-servers ".$primary_dns.", ".$secondary_dns.";\r\n";
                                    } 

                                  
                                // DHCPD.CONF speichern und schließen
                                  
                                file_put_contents('/etc/dhcpd.conf',$array); 

                                ?>

                                Kommentar

                                Lädt...
                                X