diff options
author | Jim Meyering <jim@meyering.net> | 2008-05-15 13:29:56 +0200 |
---|---|---|
committer | Simo Sorce <ssorce@redhat.com> | 2008-05-15 12:59:28 -0400 |
commit | 58592c3b4f376a5387982607b39ba68ca887411d (patch) | |
tree | e9a322229b8abe4758e30d782af94850d853999a /ipa-server/ipa-kpasswd | |
parent | 0d2212fe2f1ea73af36ab955acf8b1518b6cbf64 (diff) | |
download | freeipa-58592c3b4f376a5387982607b39ba68ca887411d.tar.gz freeipa-58592c3b4f376a5387982607b39ba68ca887411d.tar.xz freeipa-58592c3b4f376a5387982607b39ba68ca887411d.zip |
detect failure to write ipa_kpasswd.pid file
* ipa_kpasswd.c (main): Detect not just open failure,
but also any write failure.
Diffstat (limited to 'ipa-server/ipa-kpasswd')
-rw-r--r-- | ipa-server/ipa-kpasswd/ipa_kpasswd.c | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/ipa-server/ipa-kpasswd/ipa_kpasswd.c b/ipa-server/ipa-kpasswd/ipa_kpasswd.c index 54a87284c..1e4f12b41 100644 --- a/ipa-server/ipa-kpasswd/ipa_kpasswd.c +++ b/ipa-server/ipa-kpasswd/ipa_kpasswd.c @@ -3,7 +3,7 @@ /* Authors: Simo Sorce <ssorce@redhat.com> * - * Copyright (C) 2007 Red Hat + * Copyright (C) 2007, 2008 Red Hat * see file 'COPYING' for use and warranty information * * This program is free software; you can redistribute it and/or @@ -1188,13 +1188,18 @@ int main(int argc, char *argv[]) } /* Write out the pid file after the sigterm handler */ - FILE *f = fopen("/var/run/ipa_kpasswd.pid", "w"); - if (f == NULL) { - syslog(LOG_ERR,"Couldn't create pid file /var/run/ipa_kpasswd.pid: %s", strerror(errno)); + const char *pid_file = "/var/run/ipa_kpasswd.pid"; + FILE *f = fopen(pid_file, "w"); + int fail = 1; + if (f) { + int n_bytes = fprintf(f, "%ld\n", (long) getpid()); + if (fclose(f) == 0 && 0 < n_bytes) + fail = 0; + } + if (fail) { + syslog(LOG_ERR,"Couldn't create pid file %s: %s", + pid_file, strerror(errno)); exit(1); - } else { - fprintf(f, "%ld\n", (long) getpid()); - fclose(f); } tai = ai; |