X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=FS%2Fbin%2Ffreeside-selfservice-xmlrpcd;h=acf516abe0c98c3d71f80935fc33768b162fa990;hp=fd7639cacd2eac38bf359c7084122f2e3052b288;hb=aed8ec35ccb9cdeb7ea0cb6ff2946f9d83d582f6;hpb=0743ea91445e0682a00a05a0ae8f72e587d6a0e9 diff --git a/FS/bin/freeside-selfservice-xmlrpcd b/FS/bin/freeside-selfservice-xmlrpcd index fd7639cac..acf516abe 100755 --- a/FS/bin/freeside-selfservice-xmlrpcd +++ b/FS/bin/freeside-selfservice-xmlrpcd @@ -15,7 +15,7 @@ use constant MAX_PROCESSES => 10; # Total server process count. use constant SERVER_PORT => 8080; # Server port. use constant TESTING_CHURN => 0; # Randomly test process respawning. -use POE; # Base features. +use POE 1.2; # Base features. use POE::Filter::HTTPD; # For serving HTTP content. use POE::Wheel::ReadWrite; # For socket I/O. use POE::Wheel::SocketFactory; # For serving socket connections. @@ -23,8 +23,9 @@ use POE::Wheel::SocketFactory; # For serving socket connections. use XMLRPC::Transport::HTTP; #SOAP::Transport::HTTP; use XMLRPC::Lite; # for XMLRPC::Serializer -use FS::Daemon qw(daemonize1 drop_root logfile daemonize2 ); -use FS::UID qw(adminsuidsetup); +use FS::Daemon qw( daemonize1 drop_root logfile daemonize2 ); +use FS::UID qw( adminsuidsetup forksuidsetup dbh ); +use FS::Conf; use FS::ClientAPI qw( load_clientapi_modules ); use FS::ClientAPI_XMLRPC; #FS::SelfService::XMLRPC; @@ -35,7 +36,7 @@ my $lock_file = "$FREESIDE_LOCK/selfservice-xmlrpcd.writelock"; #freeside xmlrpc.cgi my %typelookup = ( - base64 => [10, sub {$_[0] =~ /[^\x09\x0a\x0d\x20-\x7f]/}, 'as_base64'], +#not utf-8 safe# base64 => [10, sub {$_[0] =~ /[^\x09\x0a\x0d\x20-\x7f]/}, 'as_base64'], dateTime => [35, sub {$_[0] =~ /^\d{8}T\d\d:\d\d:\d\d$/}, 'as_dateTime'], string => [40, sub {1}, 'as_string'], ); @@ -47,18 +48,32 @@ my %typelookup = ( my $user = shift or die &usage; $FS::Daemon::NOSIG = 1; -daemonize1('freeside-selfservice-xmlrpcd'); +$FS::Daemon::PID_NEWSTYLE = 1; +daemonize1('selfservice-xmlrpcd'); POE::Kernel->has_forked(); #daemonize forks... drop_root(); +adminsuidsetup($user); + load_clientapi_modules; logfile("$FREESIDE_LOG/selfservice-xmlrpcd.log"); daemonize2(); +FS::ClientAPI::Signup::clear_cache(); + +my $conf = new FS::Conf; + +die "not running; selfservice-xmlrpc conf option is off\n" + unless $conf->exists('selfservice-xmlrpc'); + +#parent doesn't need to hold a DB connection open +dbh->disconnect; +undef $FS::UID::dbh; + ### # the main loop ### @@ -177,6 +192,9 @@ sub server_do_fork { $heap->{is_a_child} = 1; $heap->{children} = {}; + #freeside db connection, etc. + forksuidsetup($user); + return; } } @@ -271,7 +289,7 @@ sub client_stop { sub client_got_request { my ( $heap, $request ) = @_[ HEAP, ARG0 ]; - freeside_kid_time(); + forksuidsetup($user) unless dbh && dbh->ping; my $serializer = new XMLRPC::Serializer(typelookup => \%typelookup); @@ -296,20 +314,6 @@ sub client_got_request { $heap->{client}->put($response); } -#setup the database connection and other things FS::SelfService::XMLRPC -#expects to be in place. aka "kid time" in freeside-selfservice-server -sub freeside_kid_time { - - #if we need a db connection in the parent - ##get new db handle - #$FS::UID::dbh->{InactiveDestroy} = 1; - #forksuidsetup($user); - - adminsuidsetup($user); - - #i guess that was it -} - ### The client handler received an error. Stop the ReadWrite wheel, ### which also closes the socket.