Changeset 1031
- Timestamp:
- 03/03/08 14:40:53
(9 months ago)
- Author:
- rats
- Message:
first BSD fixes
-
Files:
-
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
| r1029 |
r1031 |
|
| 1 | 1 | ispCP ω 1.0.0 Changelog |
|---|
| 2 | 2 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
|---|
| | 3 | |
|---|
| | 4 | 2008-03-03 Benedikt Heintel |
|---|
| | 5 | - ENGINE: |
|---|
| | 6 | * Added: Engine support for BSB plattforms (different root group) |
|---|
| 3 | 7 | |
|---|
| 4 | 8 | 2008-03-02 Benedikt Heintel |
|---|
| r1028 |
r1031 |
|
| 365 | 365 | } |
|---|
| 366 | 366 | |
|---|
| | 367 | ## |
|---|
| | 368 | # setfmode |
|---|
| | 369 | # sets user, group and rights of a file. |
|---|
| | 370 | # If $fgroup set to 'null' this function will get the GID from /etc/passwd |
|---|
| | 371 | # |
|---|
| | 372 | # @author VHCS/ispCP Team |
|---|
| | 373 | # @author Benedikt Heintel |
|---|
| | 374 | # @copyright 2006-2008 by ispCP | http://isp-control.net |
|---|
| | 375 | # @version 1.1 |
|---|
| | 376 | # |
|---|
| | 377 | # @access public |
|---|
| | 378 | # @param String $fname File Name |
|---|
| | 379 | # @param Mixed $fuser Linux User or UserID |
|---|
| | 380 | # @param Mixed $fgroup Linux Group, GroupID or null |
|---|
| | 381 | # @param int $fperms Linux Permissions |
|---|
| | 382 | # @return int success (0) or error (-1) |
|---|
| 367 | 383 | sub setfmode { |
|---|
| 368 | 384 | |
|---|
| 369 | | my ($fname, $fuid, $fgid, $fperms) = @_; |
|---|
| | 385 | my ($fname, $fuser, $fgroup, $fperms) = @_; |
|---|
| 370 | 386 | |
|---|
| 371 | 387 | push_el(\@main::el, 'setfmode()', 'Starting...'); |
|---|
| 372 | 388 | |
|---|
| 373 | | if ( |
|---|
| 374 | | !defined($fname) || !defined($fuid) || |
|---|
| 375 | | !defined($fgid) || !defined($fperms) || |
|---|
| 376 | | $fname eq '' || $fuid eq '' || |
|---|
| 377 | | $fgid eq '' || $fperms eq '' |
|---|
| 378 | | ) |
|---|
| 379 | | { |
|---|
| 380 | | |
|---|
| 381 | | push_el( |
|---|
| 382 | | \@main::el, |
|---|
| 383 | | 'setfmode()', |
|---|
| 384 | | "ERROR: Undefined input data, fname: |$fname|, fuid: |$fuid|, fgid: |$fgid|, fperms: |$fperms| !" |
|---|
| 385 | | ); |
|---|
| 386 | | |
|---|
| | 389 | if (!defined($fname) || !defined($fuser) || !defined($fperms) || |
|---|
| | 390 | $fname eq '' || $fname eq '' || $fgroup eq '' || $fperms eq '') { |
|---|
| | 391 | |
|---|
| | 392 | push_el(\@main::el, 'setfmode()', |
|---|
| | 393 | "ERROR: Undefined input data, fname: |$fname|, fuid: |$fuser|, fgid: |$fgroup|, fperms: |$fperms| !"); |
|---|
| 387 | 394 | return -1; |
|---|
| 388 | | |
|---|
| 389 | 395 | } |
|---|
| 390 | 396 | |
|---|
| 391 | 397 | if (! -e $fname) { |
|---|
| 392 | | |
|---|
| 393 | | push_el( |
|---|
| 394 | | \@main::el, |
|---|
| 395 | | 'setfmode()', |
|---|
| 396 | | "ERROR: File '$fname' does not exist !" |
|---|
| 397 | | ); |
|---|
| 398 | | |
|---|
| | 398 | push_el(\@main::el, 'setfmode()', "ERROR: File '$fname' does not exist !"); |
|---|
| 399 | 399 | return -1; |
|---|
| 400 | 400 | } |
|---|
| 401 | 401 | |
|---|
| 402 | 402 | my @udata = (); |
|---|
| 403 | | |
|---|
| 404 | 403 | my @gdata = (); |
|---|
| 405 | 404 | |
|---|
| 406 | | my ($uid, $gid) = ($fuid, $fgid); |
|---|
| 407 | | |
|---|
| 408 | | if ($fuid =~ /^\d+$/) { |
|---|
| 409 | | |
|---|
| 410 | | $uid = $fuid; |
|---|
| 411 | | |
|---|
| 412 | | } elsif ($fuid ne '-1') { |
|---|
| 413 | | |
|---|
| 414 | | @udata = getpwnam($fuid); |
|---|
| 415 | | |
|---|
| 416 | | if (scalar(@udata) == 0) { |
|---|
| 417 | | |
|---|
| 418 | | push_el( |
|---|
| 419 | | \@main::el, |
|---|
| 420 | | 'setfmode()', |
|---|
| 421 | | "ERROR: Unknown user '$fuid' !" |
|---|
| 422 | | ); |
|---|
| 423 | | |
|---|
| 424 | | return -1; |
|---|
| 425 | | |
|---|
| 426 | | } |
|---|
| 427 | | |
|---|
| 428 | | $uid = $udata[2]; |
|---|
| 429 | | } |
|---|
| 430 | | |
|---|
| 431 | | if ($fgid =~ /^\d+$/) { |
|---|
| 432 | | |
|---|
| 433 | | $gid = $fgid; |
|---|
| 434 | | |
|---|
| 435 | | } elsif ($fgid ne '-1') { |
|---|
| 436 | | |
|---|
| 437 | | @gdata = getgrnam($fgid); |
|---|
| 438 | | |
|---|
| 439 | | if (scalar(@gdata) == 0) { |
|---|
| 440 | | |
|---|
| 441 | | push_el( |
|---|
| 442 | | \@main::el, |
|---|
| 443 | | 'setfmode()', |
|---|
| 444 | | "ERROR: Unknown group '$fgid' !" |
|---|
| 445 | | ); |
|---|
| 446 | | |
|---|
| 447 | | return -1; |
|---|
| 448 | | |
|---|
| 449 | | } |
|---|
| 450 | | |
|---|
| 451 | | $gid = $gdata[2]; |
|---|
| 452 | | } |
|---|
| | 405 | my ($uid, $gid) = (undef, undef); |
|---|
| | 406 | |
|---|
| | 407 | # get UID of user |
|---|
| | 408 | if ($fuser =~ /^\d+$/) { |
|---|
| | 409 | $uid = $fuser; |
|---|
| | 410 | } |
|---|
| | 411 | elsif ($fuser ne '-1') { |
|---|
| | 412 | @udata = getpwnam($fuser); |
|---|
| | 413 | |
|---|
| | 414 | if (scalar(@udata) == 0) { |
|---|
| | 415 | push_el(\@main::el, 'setfmode()', "ERROR: Unknown user '$fuser' !"); |
|---|
| | 416 | return -1; |
|---|
| | 417 | } |
|---|
| | 418 | $uid = $udata[2]; |
|---|
| | 419 | } |
|---|
| | 420 | |
|---|
| | 421 | # get GID of user |
|---|
| | 422 | if ($fgroup =~ /^\d+$/) { |
|---|
| | 423 | $gid = $fgroup; |
|---|
| | 424 | } |
|---|
| | 425 | elsif ($fgroup eq null) { |
|---|
| | 426 | $gid = $udata[3]; |
|---|
| | 427 | } |
|---|
| | 428 | elsif ($fgroup ne '-1') { |
|---|
| | 429 | @gdata = getgrnam($fgroup); |
|---|
| | 430 | |
|---|
| | 431 | if (scalar(@udata) == 0) { |
|---|
| | 432 | push_el(\@main::el, 'setfmode()', "ERROR: Unknown user '$fgroup' !"); |
|---|
| | 433 | return -1; |
|---|
| | 434 | } |
|---|
| | 435 | $gid = $gdata[2]; |
|---|
| | 436 | } |
|---|
| 453 | 437 | |
|---|
| 454 | 438 | my $res = chmod ($fperms, $fname); |
|---|
| 455 | 439 | |
|---|
| 456 | 440 | if ($res != 1) { |
|---|
| 457 | | |
|---|
| 458 | | push_el( |
|---|
| 459 | | \@main::el, |
|---|
| 460 | | 'setfmode()', |
|---|
| 461 | | "ERROR: Can not change permissions of file '$fname' !" |
|---|
| 462 | | ); |
|---|
| 463 | | |
|---|
| | 441 | push_el(\@main::el, 'setfmode()', "ERROR: Can not change permissions of file '$fname' !"); |
|---|
| 464 | 442 | return -1; |
|---|
| 465 | | |
|---|
| 466 | 443 | } |
|---|
| 467 | 444 | |
|---|
| … | … | |
| 469 | 446 | |
|---|
| 470 | 447 | if ($res != 1) { |
|---|
| 471 | | |
|---|
| 472 | | push_el( |
|---|
| 473 | | \@main::el, |
|---|
| 474 | | 'setfmode()', |
|---|
| 475 | | "ERROR: Can not change user/group of file '$fname' !" |
|---|
| 476 | | ); |
|---|
| 477 | | |
|---|
| | 448 | push_el(\@main::el, 'setfmode()', "ERROR: Can not change user/group of file '$fname' !"); |
|---|
| 478 | 449 | return -1; |
|---|
| 479 | 450 | |
|---|
| … | … | |
| 481 | 452 | |
|---|
| 482 | 453 | push_el(\@main::el, 'setfmode()', 'Ending...'); |
|---|
| 483 | | |
|---|
| 484 | 454 | return 0; |
|---|
| 485 | | |
|---|
| 486 | | } |
|---|
| | 455 | } |
|---|
| | 456 | |
|---|
| 487 | 457 | |
|---|
| 488 | 458 | sub get_file { |
|---|
| … | … | |
| 1934 | 1904 | } |
|---|
| 1935 | 1905 | |
|---|
| 1936 | | $rs = store_file($main::cfg_file, $fline, 'root', 'root', 0644); |
|---|
| | 1906 | $rs = store_file($main::cfg_file, $fline, 'root', null, 0644); |
|---|
| 1937 | 1907 | |
|---|
| 1938 | 1908 | return 1 if ($rs != 0); |
|---|
| … | … | |
| 2118 | 2088 | |
|---|
| 2119 | 2089 | my $suexec_user_pref = $main::cfg{'APACHE_SUEXEC_USER_PREF'}; |
|---|
| 2120 | | |
|---|
| 2121 | 2090 | my $sys_user = "$suexec_user_pref$sys_uid"; |
|---|
| 2122 | | |
|---|
| 2123 | 2091 | my $sys_group = "$suexec_user_pref$sys_gid"; |
|---|
| 2124 | | |
|---|
| 2125 | | # group data. |
|---|
| 2126 | | |
|---|
| 2127 | | my $cmd = "$main::cfg{'CMD_GROUPADD'} -g $sys_gid $sys_group"; |
|---|
| 2128 | | |
|---|
| | 2092 | my $cmd = undef; |
|---|
| | 2093 | |
|---|
| | 2094 | # group data - BSD has another format: |
|---|
| | 2095 | if ($main::cfg{'ROOT_GROUP'} eq "wheel") { |
|---|
| | 2096 | $cmd = "$main::cfg{'CMD_GROUPADD'} $sys_group -g $sys_gid"; |
|---|
| | 2097 | } else { |
|---|
| | 2098 | $cmd = "$main::cfg{'CMD_GROUPADD'} -g $sys_gid $sys_group"; |
|---|
| | 2099 | } |
|---|
| 2129 | 2100 | $rs = sys_command($cmd); |
|---|
| 2130 | 2101 | |
|---|
| … | … | |
| 2136 | 2107 | my $homedir = "$main::cfg{'APACHE_WWW_DIR'}/@$dmn_data[1]"; |
|---|
| 2137 | 2108 | |
|---|
| 2138 | | $cmd = "$main::cfg{'CMD_USERADD'} -c virtual-user -d $homedir -g $sys_group -s /bin/false -u $sys_uid $sys_user"; |
|---|
| | 2109 | # BSD has another format: |
|---|
| | 2110 | if ($main::cfg{'ROOT_GROUP'} eq "wheel") { |
|---|
| | 2111 | $cmd = "$main::cfg{'CMD_USERADD'} $sys_user -c virtual-user -d $homedir -g $sys_group -s /bin/false -u $sys_uid"; |
|---|
| | 2112 | } else { |
|---|
| | 2113 | $cmd = "$main::cfg{'CMD_USERADD'} -c virtual-user -d $homedir -g $sys_group -s /bin/false -u $sys_uid $sys_user"; |
|---|
| | 2114 | } |
|---|
| 2139 | 2115 | |
|---|
| 2140 | 2116 | $rs = sys_command($cmd); |
|---|
| r1026 |
r1031 |
|
| 411 | 411 | sub setup_system_users { |
|---|
| 412 | 412 | |
|---|
| 413 | | my ($rs, $rdata) = (undef, undef); |
|---|
| | 413 | my ($rs, $rdata, $cmd) = (undef, undef, undef); |
|---|
| 414 | 414 | |
|---|
| 415 | 415 | push_el(\@main::el, 'setup_system_users()', 'Starting...'); |
|---|
| … | … | |
| 425 | 425 | |
|---|
| 426 | 426 | if (scalar(@gdata) == 0) { # we have not this one group data; |
|---|
| 427 | | my $cmd = "$main::cfg{'CMD_GROUPADD'} $fgid"; |
|---|
| | 427 | if ($main::cfg{'ROOT_GROUP'} eq "wheel") { |
|---|
| | 428 | $cmd = "$main::cfg{'CMD_GROUPADD'} -g $fgid"; |
|---|
| | 429 | } else { |
|---|
| | 430 | $cmd = "$main::cfg{'CMD_GROUPADD'} $fgid"; |
|---|
| | 431 | } |
|---|
| 428 | 432 | $rs = sys_command($cmd); |
|---|
| 429 | 433 | |
|---|
| … | … | |
| 438 | 442 | |
|---|
| 439 | 443 | if (scalar(@udata) == 0) { # we have not this one user data; |
|---|
| 440 | | my $cmd = "$main::cfg{'CMD_USERADD'} -c vmail-user -g $gid -s /bin/false $fuid"; |
|---|
| | 444 | if ($main::cfg{'ROOT_GROUP'} eq "wheel") { |
|---|
| | 445 | $cmd = "$main::cfg{'CMD_USERADD'} vmail-user -s /bin/false $fuid"; |
|---|
| | 446 | } else { |
|---|
| | 447 | $cmd = "$main::cfg{'CMD_USERADD'} -c vmail-user -g $gid -s /bin/false $fuid"; |
|---|
| | 448 | } |
|---|
| 441 | 449 | $rs = sys_command($cmd); |
|---|
| 442 | 450 | |
|---|
| … | … | |
| 458 | 466 | |
|---|
| 459 | 467 | if (scalar(@gdata) == 0) { # we do not have this group |
|---|
| 460 | | my $cmd = "$main::cfg{'CMD_GROUPADD'} -g $mgid $prefix$mgid"; |
|---|
| | 468 | if ($main::cfg{'ROOT_GROUP'} eq "wheel") { |
|---|
| | 469 | $cmd = "$main::cfg{'CMD_GROUPADD'} v-group -g $mgid $prefix$mgid"; |
|---|
| | 470 | } else { |
|---|
| | 471 | $cmd = "$main::cfg{'CMD_GROUPADD'} -g $mgid $prefix$mgid"; |
|---|
| | 472 | } |
|---|
| 461 | 473 | $rs = sys_command($cmd); |
|---|
| 462 | 474 | |
|---|
| … | … | |
| 466 | 478 | |
|---|
| 467 | 479 | if (scalar(@udata) == 0) { # we do not have this user |
|---|
| 468 | | my $cmd = "$main::cfg{'CMD_USERADD'} -d $main::cfg{'PHP_STARTER_DIR'}/master -m -c vu-master -g $prefix$mgid -s /bin/false -u $muid $prefix$muid"; |
|---|
| | 480 | if ($main::cfg{'ROOT_GROUP'} eq "wheel") { |
|---|
| | 481 | $cmd = "$main::cfg{'CMD_USERADD'} vu-master -d $main::cfg{'PHP_STARTER_DIR'}/master -m -s /bin/false -u $muid $prefix$muid"; |
|---|
| | 482 | } else { |
|---|
| | 483 | $cmd = "$main::cfg{'CMD_USERADD'} -d $main::cfg{'PHP_STARTER_DIR'}/master -m -c vu-master -g $prefix$mgid -s /bin/false -u $muid $prefix$muid"; |
|---|
| | 484 | } |
|---|
| 469 | 485 | $rs = sys_command($cmd); |
|---|
| 470 | 486 | |
|---|
| r712 |
r1031 |
|
| 5 | 5 | extern char *optarg; |
|---|
| 6 | 6 | extern int optind, opterr, optopt; |
|---|
| 7 | | |
|---|
| | 7 | |
|---|
| 8 | 8 | |
|---|
| 9 | 9 | int main(int argc, char **argv) |
|---|
| … | … | |
| 24 | 24 | given_pid = 0; |
|---|
| 25 | 25 | pidfile_path = (char)'\0'; |
|---|
| 26 | | |
|---|
| | 26 | |
|---|
| 27 | 27 | while (( c = getopt( argc, argv, "p:" )) != EOF ) { |
|---|
| 28 | | switch( c ) { |
|---|
| 29 | | case 'p': |
|---|
| 30 | | pidfile_path = optarg; |
|---|
| 31 | | given_pid = 1; |
|---|
| 32 | | break; |
|---|
| 33 | | |
|---|
| 34 | | } |
|---|
| | 28 | switch( c ) { |
|---|
| | 29 | case 'p': |
|---|
| | 30 | pidfile_path = optarg; |
|---|
| | 31 | given_pid = 1; |
|---|
| | 32 | break; |
|---|
| | 33 | } |
|---|
| 35 | 34 | } |
|---|
| 36 | 35 | |
|---|
| … | … | |
| 81 | 80 | fclose(file); |
|---|
| 82 | 81 | } |
|---|
| 83 | | |
|---|
| | 82 | |
|---|
| 84 | 83 | for ( ; ; ) { |
|---|
| 85 | 84 | |
|---|
|