From 0b3882cb830740de8746a75ccdd98a89d4348ff8 Mon Sep 17 00:00:00 2001 From: Art Cancro Date: Mon, 28 Nov 2005 02:21:04 +0000 Subject: [PATCH] * Eliminated the use of tmpnam() to shut up the compiler warnings. --- citadel/ChangeLog | 3 +++ citadel/citadel.c | 6 +++--- citadel/messages.c | 7 +++---- citadel/msgbase.c | 10 +++++----- citadel/room_ops.c | 2 +- citadel/routines2.c | 4 ++-- citadel/serv_calendar.c | 2 +- citadel/serv_network.c | 4 ++-- citadel/serv_vandelay.c | 12 ++++++------ citadel/serv_vcard.c | 2 +- citadel/setup.c | 4 ++-- citadel/tools.c | 17 +++++++++++++++++ citadel/tools.h | 1 + 13 files changed, 47 insertions(+), 27 deletions(-) diff --git a/citadel/ChangeLog b/citadel/ChangeLog index 4db25d280..bdf12479e 100644 --- a/citadel/ChangeLog +++ b/citadel/ChangeLog @@ -1,5 +1,8 @@ $Id$ +Sun Nov 27 21:20:27 EST 2005 ajc +* Eliminated the use of tmpnam() to shut up the compiler warnings. + Mon Nov 21 16:59:43 CET 2005 dothebart * add some script to wrap the debian package build that does some magic about the versioning in the package and the citadel system diff --git a/citadel/citadel.c b/citadel/citadel.c index 6d7b569cf..84c4c1e45 100644 --- a/citadel/citadel.c +++ b/citadel/citadel.c @@ -1364,9 +1364,9 @@ NEWUSR: if (strlen(rc_password) == 0) { * program. Don't mess with these once they've been set, because we * will be unlinking them later on in the program and we don't * want to delete something that we didn't create. */ - snprintf(temp, sizeof temp, tmpnam(NULL)); - snprintf(temp2, sizeof temp2, tmpnam(NULL)); - snprintf(tempdir, sizeof tempdir, tmpnam(NULL)); + CtdlMakeTempFileName(temp, sizeof temp); + CtdlMakeTempFileName(temp2, sizeof temp2); + CtdlMakeTempFileName(tempdir, sizeof tempdir); /* Get screen dimensions. First we go to a default of 80x24. Then * we try to get the user's actual screen dimensions off the server. diff --git a/citadel/messages.c b/citadel/messages.c index 1bcf7add8..b71ca5d79 100644 --- a/citadel/messages.c +++ b/citadel/messages.c @@ -1465,9 +1465,8 @@ void image_view(CtdlIPC *ipc, unsigned long msg) len = (size_t)extract_long(buf, 0); progress(ipc, len, len); scr_flush(); - snprintf(tmp, sizeof tmp, "%s.%s", - tmpnam(NULL), - ptr->filename); + CtdlMakeTempFileName(tmp, sizeof tmp); + strcat(tmp, ptr->filename); save_buffer(file, len, tmp); free(file); do_image_view(tmp); @@ -1510,7 +1509,7 @@ void readmsgs(CtdlIPC *ipc, else b = 0; - strcpy(prtfile, tmpnam(NULL)); + CtdlMakeTempFileName(prtfile, sizeof prtfile); if (msg_arr) { free(msg_arr); diff --git a/citadel/msgbase.c b/citadel/msgbase.c index 73269f3e0..c0e5eaa2c 100644 --- a/citadel/msgbase.c +++ b/citadel/msgbase.c @@ -3537,12 +3537,12 @@ void CtdlWriteObject(char *req_room, /* Room to stuff it in */ char *encoded_message = NULL; off_t raw_length = 0; - if (is_mailbox != NULL) + if (is_mailbox != NULL) { MailboxName(roomname, sizeof roomname, is_mailbox, req_room); - else + } + else { safestrncpy(roomname, req_room, sizeof(roomname)); - lprintf(CTDL_DEBUG, "CtdlWriteObject() to <%s> (flags=%d)\n", roomname, flags); - + } fp = fopen(tempfilename, "rb"); if (fp == NULL) { @@ -3691,7 +3691,7 @@ void CtdlPutSysConfig(char *sysconfname, char *sysconfdata) { char temp[PATH_MAX]; FILE *fp; - strcpy(temp, tmpnam(NULL)); + CtdlMakeTempFileName(temp, sizeof temp); fp = fopen(temp, "w"); if (fp == NULL) return; diff --git a/citadel/room_ops.c b/citadel/room_ops.c index 9e0e8f0b0..35adabbc3 100644 --- a/citadel/room_ops.c +++ b/citadel/room_ops.c @@ -1083,7 +1083,7 @@ void cmd_rdir(void) char tempfilename[PATH_MAX]; if (CtdlAccessCheck(ac_logged_in)) return; - tmpnam(tempfilename); + CtdlMakeTempFileName(tempfilename, sizeof tempfilename); getroom(&CC->room, CC->room.QRname); getuser(&CC->user, CC->curr_user); diff --git a/citadel/routines2.c b/citadel/routines2.c index 731586bef..e2d9ee2b5 100644 --- a/citadel/routines2.c +++ b/citadel/routines2.c @@ -1046,8 +1046,8 @@ void network_config_management(CtdlIPC *ipc, char *entrytype, char *comment) return; } - snprintf(filename, sizeof filename, "%s.listedit", tmpnam(NULL)); - snprintf(changefile, sizeof changefile, "%s.listedit", tmpnam(NULL)); + CtdlMakeTempFileName(filename, sizeof filename); + CtdlMakeTempFileName(changefile, sizeof changefile); tempfp = fopen(filename, "w"); if (tempfp == NULL) { diff --git a/citadel/serv_calendar.c b/citadel/serv_calendar.c index 2d8a38240..527982072 100644 --- a/citadel/serv_calendar.c +++ b/citadel/serv_calendar.c @@ -126,7 +126,7 @@ void ical_write_to_cal(struct ctdluser *u, icalcomponent *cal) { return; } - strcpy(temp, tmpnam(NULL)); + CtdlMakeTempFileName(temp, sizeof temp); ser = icalcomponent_as_ical_string(cal); if (ser == NULL) return; diff --git a/citadel/serv_network.c b/citadel/serv_network.c index 7ff3ea35a..b1c4c162f 100644 --- a/citadel/serv_network.c +++ b/citadel/serv_network.c @@ -390,7 +390,7 @@ void cmd_snet(char *argbuf) { unbuffer_output(); if (CtdlAccessCheck(ac_room_aide)) return; - safestrncpy(tempfilename, tmpnam(NULL), sizeof tempfilename); + CtdlMakeTempFileName(tempfilename, sizeof tempfilename); assoc_file_name(filename, sizeof filename, &CC->room, "netconfigs"); fp = fopen(tempfilename, "w"); @@ -1669,7 +1669,7 @@ void receive_spool(int sock, char *remote_nodename) { long plen; FILE *fp; - strcpy(tempfilename, tmpnam(NULL)); + CtdlMakeTempFileName(tempfilename, sizeof tempfilename); if (sock_puts(sock, "NDOP") < 0) return; if (sock_gets(sock, buf) < 0) return; lprintf(CTDL_DEBUG, "<%s\n", buf); diff --git a/citadel/serv_vandelay.c b/citadel/serv_vandelay.c index 49f5ed9de..501e5b74f 100644 --- a/citadel/serv_vandelay.c +++ b/citadel/serv_vandelay.c @@ -193,7 +193,7 @@ void artv_export_message(long msgnum) { struct ser_ret smr; FILE *fp; char buf[SIZ]; - char tempfile[SIZ]; + char tempfile[PATH_MAX]; msg = CtdlFetchMessage(msgnum, 1); if (msg == NULL) return; /* fail silently */ @@ -208,7 +208,7 @@ void artv_export_message(long msgnum) { CtdlFreeMessage(msg); /* write it in base64 */ - strcpy(tempfile, tmpnam(NULL)); + CtdlMakeTempFileName(tempfile, sizeof tempfile); snprintf(buf, sizeof buf, "./base64 -e >%s", tempfile); fp = popen(buf, "w"); fwrite(smr.ser, smr.len, 1, fp); @@ -517,7 +517,7 @@ void artv_import_message(void) { long msglen; FILE *fp; char buf[SIZ]; - char tempfile[SIZ]; + char tempfile[PATH_MAX]; char *mbuf; memset(&smi, 0, sizeof(struct MetaData)); @@ -529,7 +529,7 @@ void artv_import_message(void) { lprintf(CTDL_INFO, "message #%ld\n", msgnum); /* decode base64 message text */ - strcpy(tempfile, tmpnam(NULL)); + CtdlMakeTempFileName(tempfile, sizeof tempfile); snprintf(buf, sizeof buf, "./base64 -d >%s", tempfile); fp = popen(buf, "w"); while (client_getln(buf, sizeof buf), strcasecmp(buf, END_OF_MESSAGE)) { @@ -608,8 +608,8 @@ void cmd_artv(char *cmdbuf) { } is_running = 1; - strcpy(artv_tempfilename1, tmpnam(NULL)); - strcpy(artv_tempfilename2, tmpnam(NULL)); + CtdlMakeTempFileName(artv_tempfilename1, sizeof artv_tempfilename1); + CtdlMakeTempFileName(artv_tempfilename2, sizeof artv_tempfilename2); extract_token(cmd, cmdbuf, 0, '|', sizeof cmd); if (!strcasecmp(cmd, "export")) artv_do_export(); diff --git a/citadel/serv_vcard.c b/citadel/serv_vcard.c index a106a872f..24ab2199e 100644 --- a/citadel/serv_vcard.c +++ b/citadel/serv_vcard.c @@ -540,7 +540,7 @@ void vcard_write_user(struct ctdluser *u, struct vCard *v) { FILE *fp; char *ser; - strcpy(temp, tmpnam(NULL)); + CtdlMakeTempFileName(temp, sizeof temp); ser = vcard_serialize(v); fp = fopen(temp, "w"); diff --git a/citadel/setup.c b/citadel/setup.c index 2cf235005..7d4edbc20 100644 --- a/citadel/setup.c +++ b/citadel/setup.c @@ -718,7 +718,7 @@ void strprompt(char *prompt_title, char *prompt_text, char *str) #endif char buf[SIZ]; char setupmsg[SIZ]; - char *dialog_result; + char dialog_result[PATH_MAX]; FILE *fp = NULL; strcpy(setupmsg, ""); @@ -736,7 +736,7 @@ void strprompt(char *prompt_title, char *prompt_text, char *str) break; case UI_DIALOG: - dialog_result = tmpnam(NULL); + CtdlMakeTempFileName(dialog_result, sizeof dialog_result); sprintf(buf, "exec %s --backtitle '%s' --inputbox '%s' 19 72 '%s' 2>%s", getenv("CTDL_DIALOG"), prompt_title, diff --git a/citadel/tools.c b/citadel/tools.c index 982d1ae1b..e8a1abc97 100644 --- a/citadel/tools.c +++ b/citadel/tools.c @@ -634,3 +634,20 @@ char *bmstrcasestr(char *text, char *pattern) { +/* + * Local replacement for controversial C library function that generates + * names for temporary files. Included to shut up compiler warnings. + */ +void CtdlMakeTempFileName(char *name, int len) { + int i = 0; + + while (i++, i < 100) { + snprintf(name, len, "/tmp/ctdl.%04x.%04x", + getpid(), + rand() + ); + if (!access(name, F_OK)) { + return; + } + } +} diff --git a/citadel/tools.h b/citadel/tools.h index 41bfb9407..01c196b2b 100644 --- a/citadel/tools.h +++ b/citadel/tools.h @@ -32,3 +32,4 @@ FILE *CtdlTempFile(void); char *ascmonths[12]; void generate_uuid(char *buf); char *bmstrcasestr(char *text, char *pattern); +void CtdlMakeTempFileName(char *name, int len); -- 2.39.2