[Freeipa-devel] [PATCH] detect failure to write ipa_kpasswd.pid file
Jim Meyering
jim at meyering.net
Wed May 14 22:25:52 UTC 2008
Simo Sorce <ssorce at redhat.com> wrote:
> On Wed, 2008-05-14 at 21:37 +0200, Jim Meyering wrote:
>> Hi,
>>
>> I was looking through freeIPA's C code and found a few ways to improve it.
>>
>> >From fac9600e3eb1204fd7a2d0d2c6f0b7be17a3dc02 Mon Sep 17 00:00:00 2001
>> From: Jim Meyering <meyering at redhat.com>
>> Date: Sun, 4 May 2008 15:17:36 +0200
>> Subject: [PATCH] detect failure to write ipa_kpasswd.pid file
>>
>> * ipa_kpasswd.c (main): Detect not just open failure,
>> but also any write failure.
>> ---
>> ipa-server/ipa-kpasswd/ipa_kpasswd.c | 20 ++++++++++++++------
>> 1 files changed, 14 insertions(+), 6 deletions(-)
>>
>> diff --git a/ipa-server/ipa-kpasswd/ipa_kpasswd.c b/ipa-server/ipa-kpasswd/ipa_kpasswd.c
>> index 5782367..86aa6c1 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 at 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,21 @@ int main(int argc, char *argv[])
>> }
>>
>> /* Write out the pid file after the sigterm handler */
>> - FILE *f = fopen("/var/run/ipa_kpasswd.pid", "w");
>> + const char *pid_file = "/var/run/ipa_kpasswd.pid";
>> + FILE *f = fopen(pid_file, "w");
>> + int fail = 0;
>> if (f == NULL) {
>> - syslog(LOG_ERR,"Couldn't create pid file /var/run/ipa_kpasswd.pid: %s", strerror(errno));
>> - exit(1);
>> + fail = 1;
>> } else {
>> - fprintf(f, "%ld\n", (long) getpid());
>> - fclose(f);
>> + if (fprintf(f, "%ld\n", (long) getpid()) <= 0)
>> + fail = 1;
>> + if (fclose(f) != 0)
>> + fail = 1;
>> + }
>> + if (fail) {
>> + syslog(LOG_ERR,"Couldn't create pid file %s: %s",
>> + pid_file, strerror(errno));
>> + exit(1);
>> }
>>
>> tai = ai;
>> --
>> 1.5.5.1.216.g33c73
>
> The code might look better if you do if(f) {} and completely remove the
> 'else' statement.
Maybe I'm being dense, but I don't see it.
Can you be more precise?
More information about the Freeipa-devel
mailing list