+
+ if (pid_fname)
+ {
+ FILE *f = fopen(pid_fname, "w");
+ if (!f)
+ {
+ yaz_log(LOG_ERRNO|LOG_FATAL, "Couldn't create %s", pid_fname);
+ exit(0);
+ }
+ fprintf(f, "%ld", (long) getpid());
+ fclose(f);
+ xfree(pid_fname);
+ }
+ if (uid)
+ {
+ struct passwd *pw;
+
+ if (!(pw = getpwnam(uid)))
+ {
+ yaz_log(LOG_FATAL, "%s: Unknown user", uid);
+ exit(3);
+ }
+ if (log_file)
+ {
+ chown(log_file, pw->pw_uid, pw->pw_gid);
+ xfree(log_file);
+ }
+
+ if (setuid(pw->pw_uid) < 0)
+ {
+ yaz_log(LOG_FATAL|LOG_ERRNO, "setuid");
+ exit(4);
+ }
+ xfree(uid);
+ }
+