int commonio_lock_nowait (struct commonio_db *db, bool log)
{
- char* file;
- char* lock;
+ char* file = NULL;
+ char* lock = NULL;
size_t lock_file_len;
size_t file_len;
+ int err;
if (db->locked) {
return 1;
file_len = strlen(db->filename) + 11;/* %lu max size */
lock_file_len = strlen(db->filename) + 6; /* sizeof ".lock" */
file = (char*)malloc(file_len);
+ if(file == NULL) {
+ err = ENOMEM;
+ goto cleanup_ENOMEM;
+ }
lock = (char*)malloc(lock_file_len);
+ if(lock == NULL) {
+ err = ENOMEM;
+ goto cleanup_ENOMEM;
+ }
snprintf (file, file_len, "%s.%lu",
db->filename, (unsigned long) getpid ());
snprintf (lock, lock_file_len, "%s.lock", db->filename);
if (do_lock_file (file, lock, log) != 0) {
db->locked = true;
lock_count++;
+ err = 1;
+ }
+cleanup_ENOMEM:
+ if(file)
free(file);
+ if(lock)
free(lock);
- return 1;
- }
- free(file);
- free(lock);
- return 0;
+ return err;
}
int commonio_lock (struct commonio_db *db)
{
-#ifdef HAVE_LCKPWDF
+/*#ifdef HAVE_LCKPWDF*/ /* not compatible with prefix option*/
+#if 0
/*
* only if the system libc has a real lckpwdf() - the one from
* lockpw.c calls us and would cause infinite recursion!
}
len = strlen (prefix) + strlen (maildir) + strlen (user_name) + 2;
- mailfile = alloca (len);
+ mailfile = xmalloc (len);
if (prefix[0]) {
(void) snprintf (mailfile, len, "%s/%s/%s",
fprintf (stderr,
_("%s: %s mail spool (%s) not found\n"),
Prog, user_name, mailfile);
+ free(mailfile);
return 0;
} else {
fprintf (stderr,
user_name, (unsigned int) user_id,
SHADOW_AUDIT_FAILURE);
#endif /* WITH_AUDIT */
+ free(mailfile);
return -1;
}
}
SHADOW_AUDIT_SUCCESS);
}
#endif /* WITH_AUDIT */
+ free(mailfile);
return errors;
}
i = is_owner (user_id, mailfile);
user_name, (unsigned int) user_id,
SHADOW_AUDIT_FAILURE);
#endif /* WITH_AUDIT */
+ free(mailfile);
return 1;
} else if (i == -1) {
+ free(mailfile);
return 0; /* mailbox doesn't exist */
}
if (unlink (mailfile) != 0) {
SHADOW_AUDIT_SUCCESS);
}
#endif /* WITH_AUDIT */
+ free(mailfile);
return errors;
}