#include <mit-copyright.h>
#include "sms_server.h"
+#include <sys/types.h>
+#include <sys/signal.h>
+#include <sys/wait.h>
#include <krb_et.h>
#include <pwd.h>
#include "query.h"
extern int errno;
extern char *malloc(), *whoami;
extern time_t now;
+void reapchild();
sms_connect(server)
char *server;
query_timeout = 0;
status = sms_open_database();
if (!status) already_connected = 1;
+
+ signal(SIGCHLD, reapchild);
return status;
}
strcpy(buf, pw->pw_name);
strcat(buf, "@");
strcat(buf, pseudo_client.kname.realm);
- pseudo_client.clname = malloc(strlen(buf)+1);
strcpy(pseudo_client.clname, buf);
pseudo_client.users_id = get_users_id(pseudo_client.kname.name);
- pseudo_client.entity = strsave(prog);
+ pseudo_client.client_id = pseudo_client.users_id;
+ strcpy(pseudo_client.entity, prog);
pseudo_client.args = (sms_params *) malloc(sizeof(sms_params));
pseudo_client.args->sms_version_no = SMS_VERSION_2;
return 0;
return(SMS_SUCCESS);
}
}
+
+
+void reapchild()
+{
+ union wait status;
+ int pid;
+
+ while ((pid = wait3(&status, WNOHANG, (struct rusage *)0)) > 0) {
+ if (status.w_termsig != 0 || status.w_retcode != 0)
+ com_err(whoami, 0, "%d: child exits with signal %d status %d",
+ pid, status.w_termsig, status.w_retcode);
+ }
+}