From 694b3c0efb3d29da1464446b58045e51e4e6afdd Mon Sep 17 00:00:00 2001 From: Alexander Barton Date: Sun, 3 Jun 2012 13:30:46 +0200 Subject: [PATCH] New formula: sendfile 2.1b --- sendfile.rb | 3418 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 3418 insertions(+) create mode 100644 sendfile.rb diff --git a/sendfile.rb b/sendfile.rb new file mode 100644 index 0000000..12f6c47 --- /dev/null +++ b/sendfile.rb @@ -0,0 +1,3418 @@ +require 'formula' + +class Sendfile < Formula + homepage '' + url 'http://fex.rus.uni-stuttgart.de/download/sendfile-2.1b.tar.gz' + md5 '0397cbbf6261b27a1ddcbbd11ff7335c' + + def patches + # source code: + # - remove nested "MAXS() inside snprintf()" macros. + # - disable wtmp/utmp on Mac OS X. + # - only call seteuid() & setegid() when it would change user/group. + DATA + end + + def install + inreplace ["makeconfig", "etc/sfdconf", "doc/receive.1", "doc/sendfile.1", "doc/sendmsg.1", "doc/sendfiled.8" ] do |s| + s.gsub! "/usr/local", "#{HOMEBREW_PREFIX}" + s.gsub! "/var/spool/sendfile", (var + 'spool/sendfile') + end + + system "make config" + system "make all" + + sbin.install 'src/sendfiled' + sbin.install 'etc/sfdconf' + bin.install 'src/fetchfile', 'src/receive', 'src/sendfile', 'src/sendmsg' + bin.install 'src/utf7encode', 'src/wlock' + bin.install 'etc/check_sendfile', 'etc/sfconf' + etc.install 'etc/sendfile.cf', 'etc/sendfile.deny' + man1.install 'doc/fetchfile.1', 'doc/receive.1', 'doc/sendfile.1', 'doc/sendmsg.1' + man1.install 'doc/utf7encode.1', 'doc/wlock.1' + man8.install 'doc/sendfiled.8' + + (var + 'spool/sendfile/LOG').mkpath + (var + 'spool/sendfile/OUTGOING').mkpath + (var + 'spool/sendfile/LOG').chmod 00700 + (var + 'spool/sendfile/OUTGOING').chmod 01777 + + plist_path.write startup_plist + plist_path.chmod 0644 + end + + def caveats; <<-EOCAVEATS +# Start/Stop sendfiled(8) Daemon + +Note: if you only want to send file using sendfile(1) or messages using +sendmsg(1), and don't want to receive any files or messages at all, you +don't have to enable the sendfiled(8) server daemon! + +If this is your first install, automatically load on login with: + sudo cp #{plist_path} /Library/LaunchDaemons/ + sudo launchctl load -w /Library/LaunchDaemons/#{plist_path.basename} + +If this is an upgrade and you already have the #{plist_path.basename} loaded: + sudo launchctl unload -w /Library/LaunchDaemons/#{plist_path.basename} + sudo cp #{plist_path} /Library/LaunchDaemons/ + sudo launchctl load -w /Library/LaunchDaemons/#{plist_path.basename} +EOCAVEATS + end + + def startup_plist + return <<-EOPLIST + + + + + Label + #{plist_name} + ProgramArguments + + #{HOMEBREW_PREFIX}/sbin/sendfiled + + UserName + root + inetdCompatibility + + Wait + + + Sockets + + Listeners + + SockServiceName + saft + + + WorkingDirectory + #{HOMEBREW_PREFIX} + + + EOPLIST + end + +end + +__END__ + + src/address.c | 66 ++++++++-------- + src/fetchfile.c | 126 ++++++++++++++-------------- + src/io.c | 28 +++--- + src/net.c | 32 ++++---- + src/receive.c | 216 ++++++++++++++++++++++++------------------------ + src/sendfile.c | 242 +++++++++++++++++++++++++++--------------------------- + src/sendfiled.c | 180 +++++++++++++++++++++-------------------- + src/sendmsg.c | 20 +++--- + src/spool.c | 38 +++++----- + 9 files changed, 475 insertions(+), 473 deletions(-) + +diff --git a/src/address.c b/src/address.c +index 4c75028..dcf6cd1 100644 +--- a/src/address.c ++++ b/src/address.c +@@ -134,15 +134,15 @@ void destination(int argc, char **argv, + snprintf(user,FLEN-1,"%s %s",pwe->pw_name,gecos); + + /* check user configuration directory */ +- snprintf(MAXS(userconfig),"%s/.sendfile",pwe->pw_dir); +- snprintf(MAXS(tmp),SPOOL"/%s/config",pwe->pw_name); ++ snprintf(userconfig,sizeof(userconfig)-1,"%s/.sendfile",pwe->pw_dir); ++ snprintf(tmp,sizeof(tmp)-1,SPOOL"/%s/config",pwe->pw_name); + if (stat(userconfig,&finfo)<0 && stat(tmp,&finfo)==0) + symlink(tmp,userconfig); + + /* trick: argc == 0, when message reply mode */ + if (argc==0) { + if (gethostname(localhost,FLEN-1)<0) strcpy(localhost,"localhost"); +- snprintf(MAXS(tmp),"%s/msg@%s",userconfig,localhost); ++ snprintf(tmp,sizeof(tmp)-1,"%s/msg@%s",userconfig,localhost); + if ((inf=rfopen(tmp,"r")) && fgetl(line,inf)) { + if ((cp=strchr(line,'\n'))) *cp=0; + if ((cp=strchr(line,'@'))) { +@@ -187,12 +187,12 @@ void destination(int argc, char **argv, + strcpy(recipient,larg); + + /* check the sendfile alias file */ +- snprintf(MAXS(aliasfile),"%s/aliases",userconfig); ++ snprintf(aliasfile,sizeof(aliasfile)-1,"%s/aliases",userconfig); + if (check_alias(aliasfile,recipient,host,aopt)<0) { + + #ifdef RESPECT_MAIL_ALIASES + /* check the elm alias file */ +- snprintf(MAXS(aliasfile),"%s/.elm/aliases.text",pwe->pw_dir); ++ snprintf(aliasfile,sizeof(aliasfile)-1,"%s/.elm/aliases.text",pwe->pw_dir); + if (check_alias(aliasfile,recipient,host,aopt)<0) { + + #endif +@@ -342,7 +342,7 @@ int check_forward(int sockfd, char *recipient, char *host, char *redirect) { + + /* illegal answer */ + if (!str_beq(reply,"200 ")) { +- snprintf(MAXS(tmp),"server error: %s",reply+4); ++ snprintf(tmp,sizeof(tmp)-1,"server error: %s",reply+4); + errno=0; + if (client) message(prg,'F',tmp); + strcpy(redirect,reply+4); +@@ -405,7 +405,7 @@ int saft_connect(const char *type, + /* if the finger-port is specified get real port from there */ + if (port==79 || !port) { + if ((cp=strchr(host,':'))) *cp=0; +- snprintf(MAXS(tmp),"opening connection to finger://%s/%s",host,recipient); ++ snprintf(tmp,sizeof(tmp)-1,"opening connection to finger://%s/%s",host,recipient); + if (quiet<2) message(prg,'I',tmp); + port=finger_saft_port(recipient,host); + if (port<1) { +@@ -417,7 +417,7 @@ int saft_connect(const char *type, + } + + /* initiate the SAFT-connection to the server */ +- snprintf(MAXS(tmp),"opening connection to saft://%s/%s",host,recipient); ++ snprintf(tmp,sizeof(tmp)-1,"opening connection to saft://%s/%s",host,recipient); + if (quiet<2) message(prg,'I',tmp); + sockfd=open_connection(host,port); + +@@ -426,13 +426,13 @@ int saft_connect(const char *type, + /* host has no ip-address, but we can try more ... */ + if (sockfd==-3 && str_eq(type,"file")) { + if (client) { +- snprintf(MAXS(tmp),"%s has no internet-address",host); ++ snprintf(tmp,sizeof(tmp)-1,"%s has no internet-address",host); + if (quiet<2) message(prg,'W',tmp); + } + + /* try generic saft-address for this host/domain */ + if (port==SAFT) { +- snprintf(MAXS(ahost),"saft.%s",host); ++ snprintf(ahost,sizeof(ahost)-1,"saft.%s",host); + if (client) { + if(gethostbyname(ahost)){ + if (!quiet) { +@@ -446,7 +446,7 @@ int saft_connect(const char *type, + if (tolower(*answer)!='n' || !client) { + strcpy(host,ahost); + if (client) { +- snprintf(MAXS(tmp),"opening connection to %s@%s",recipient,host); ++ snprintf(tmp,sizeof(tmp)-1,"opening connection to %s@%s",recipient,host); + if (quiet<2) message(prg,'I',tmp); + } + sockfd=open_connection(host,port); +@@ -458,13 +458,13 @@ int saft_connect(const char *type, + /* try user SAFT port on connection failure */ + if (sockfd==-2 && str_eq(type,"file")) { + if (verbose) { +- snprintf(MAXS(tmp),"cannot connect to SAFT port %d on %s", ++ snprintf(tmp,sizeof(tmp)-1,"cannot connect to SAFT port %d on %s", + port,host); + message(prg,'E',tmp); + } + port=finger_saft_port(recipient,host); + if (port>0 && port!=SAFT) { +- snprintf(MAXS(tmp),"%s has no system SAFT server, " ++ snprintf(tmp,sizeof(tmp)-1,"%s has no system SAFT server, " + "trying user SAFT server on port %d",host,port); + if (quiet<2) message(prg,'W',tmp); + sockfd=open_connection(host,port); +@@ -474,9 +474,9 @@ int saft_connect(const char *type, + + } + +- if (sockfd==-1) snprintf(MAXS(tmp),"cannot create a network socket"); +- if (sockfd==-2) snprintf(MAXS(tmp),"cannot open connection to %s",host); +- if (sockfd==-3) snprintf(MAXS(tmp),"%s is unknown",host); ++ if (sockfd==-1) snprintf(tmp,sizeof(tmp)-1,"cannot create a network socket"); ++ if (sockfd==-2) snprintf(tmp,sizeof(tmp)-1,"cannot open connection to %s",host); ++ if (sockfd==-3) snprintf(tmp,sizeof(tmp)-1,"%s is unknown",host); + if (sockfd<0) { + if (client) { + errno=0; +@@ -488,7 +488,7 @@ int saft_connect(const char *type, + /* no remote server or protocol error? */ + sock_getline(sockfd,line); + if (!str_beq(line,"220 ") || !strstr(line,"SAFT")) { +- snprintf(MAXS(tmp),"No SAFT server on port %d at %s",port,host); ++ snprintf(tmp,sizeof(tmp)-1,"No SAFT server on port %d at %s",port,host); + if ((cp=strrchr(tmp,':'))) *cp=0; + if (client) { + errno=0; +@@ -500,9 +500,9 @@ int saft_connect(const char *type, + } + + /* send constant header lines */ +- snprintf(MAXS(tmp),"FROM %s",user); ++ snprintf(tmp,sizeof(tmp)-1,"FROM %s",user); + sendheader(sockfd,tmp); +- snprintf(MAXS(tmp),"TO %s",recipient); ++ snprintf(tmp,sizeof(tmp)-1,"TO %s",recipient); + sock_putline(sockfd,tmp); + + /* is there a forward set? */ +@@ -659,7 +659,7 @@ int saft_connect(const char *type, + } else { + if ((cp=strchr(host,':'))) *cp=0; + } +- snprintf(MAXS(tmp),"opening connection to finger://%s/%s",host,recipient); ++ snprintf(tmp,sizeof(tmp)-1,"opening connection to finger://%s/%s",host,recipient); + if (quiet<2) message(prg,'I',tmp); + service=finger_saft_port(recipient,host); + if (service==NULL) { +@@ -671,7 +671,7 @@ int saft_connect(const char *type, + } + + /* initiate the SAFT-connection to the server */ +- snprintf(MAXS(tmp),"opening connection to saft://%s/%s",host,recipient); ++ snprintf(tmp,sizeof(tmp)-1,"opening connection to saft://%s/%s",host,recipient); + if (quiet<2) message(prg,'I',tmp); + sockfd=open_connection(host,service); + +@@ -680,13 +680,13 @@ int saft_connect(const char *type, + /* host has no ip-address, but we can try more ... */ + if (sockfd==-3 && str_eq(type,"file")) { + if (client) { +- snprintf(MAXS(tmp),"%s has no internet-address",host); ++ snprintf(tmp,sizeof(tmp)-1,"%s has no internet-address",host); + if (quiet<2) message(prg,'W',tmp); + } + + /* try generic saft-address for this host/domain */ + if (strcasecmp(service, SERVICE) == 0 || strcmp(service, PORT_STRING) == 0) { +- snprintf(MAXS(ahost),"saft.%s",host); ++ snprintf(ahost,sizeof(ahost)-1,"saft.%s",host); + if (client) { + sockfd=open_connection(host,service); + if(sockfd >= 0){ +@@ -701,7 +701,7 @@ int saft_connect(const char *type, + if (tolower(*answer)!='n' || !client) { + strcpy(host,ahost); + if (client) { +- snprintf(MAXS(tmp),"opening connection to %s@%s",recipient,host); ++ snprintf(tmp,sizeof(tmp)-1,"opening connection to %s@%s",recipient,host); + if (quiet<2) message(prg,'I',tmp); + } + } else { +@@ -715,14 +715,14 @@ int saft_connect(const char *type, + /* try user SAFT port on connection failure */ + if (sockfd==-2 && str_eq(type,"file")) { + if (verbose) { +- snprintf(MAXS(tmp),"cannot connect to SAFT port %s on %s", ++ snprintf(tmp,sizeof(tmp)-1,"cannot connect to SAFT port %s on %s", + service,host); + message(prg,'E',tmp); + } + service=finger_saft_port(recipient,host); + if (service != NULL) needsFree = 1; + if (service != NULL && strcasecmp(service, SERVICE) != 0 && strcmp(service, PORT_STRING) != 0) { +- snprintf(MAXS(tmp),"%s has no system SAFT server, " ++ snprintf(tmp,sizeof(tmp)-1,"%s has no system SAFT server, " + "trying user SAFT server on port %s",host,service); + if (quiet<2) message(prg,'W',tmp); + sockfd=open_connection(host,service); +@@ -733,10 +733,10 @@ int saft_connect(const char *type, + + } + +- if (sockfd==-1) snprintf(MAXS(tmp),"cannot create a network socket"); +- if (sockfd==-2) snprintf(MAXS(tmp),"cannot open connection to %s",host); +- if (sockfd==-3) snprintf(MAXS(tmp),"%s is unknown",host); +- if (sockfd==-4) snprintf(MAXS(tmp),"out of memory"); ++ if (sockfd==-1) snprintf(tmp,sizeof(tmp)-1,"cannot create a network socket"); ++ if (sockfd==-2) snprintf(tmp,sizeof(tmp)-1,"cannot open connection to %s",host); ++ if (sockfd==-3) snprintf(tmp,sizeof(tmp)-1,"%s is unknown",host); ++ if (sockfd==-4) snprintf(tmp,sizeof(tmp)-1,"out of memory"); + if (sockfd<0) { + if (client) { + errno=0; +@@ -750,7 +750,7 @@ int saft_connect(const char *type, + /* no remote server or protocol error? */ + sock_getline(sockfd,line); + if (!str_beq(line,"220 ") || !strstr(line,"SAFT")) { +- snprintf(MAXS(tmp),"No SAFT server on port %s at %s",service,host); ++ snprintf(tmp,sizeof(tmp)-1,"No SAFT server on port %s at %s",service,host); + if ((cp=strrchr(tmp,':'))) *cp=0; + if (client) { + errno=0; +@@ -763,9 +763,9 @@ int saft_connect(const char *type, + } + + /* send constant header lines */ +- snprintf(MAXS(tmp),"FROM %s",user); ++ snprintf(tmp,sizeof(tmp)-1,"FROM %s",user); + sendheader(sockfd,tmp); +- snprintf(MAXS(tmp),"TO %s",recipient); ++ snprintf(tmp,sizeof(tmp)-1,"TO %s",recipient); + sock_putline(sockfd,tmp); + + /* is there a forward set? */ +diff --git a/src/fetchfile.c b/src/fetchfile.c +index bd9d3c7..cb12354 100644 +--- a/src/fetchfile.c ++++ b/src/fetchfile.c +@@ -215,14 +215,14 @@ int main(int argc, char *argv[]) { + tmpdir=mktmpdir(verbose); + + /* set various file names and check user spool and configuration directory */ +- snprintf(MAXS(pgptmp),"%s/fetchfile.pgp",tmpdir); +- snprintf(MAXS(userspool),SPOOL"/%s",pwe->pw_name); ++ snprintf(pgptmp,sizeof(pgptmp)-1,"%s/fetchfile.pgp",tmpdir); ++ snprintf(userspool,sizeof(userspool)-1,SPOOL"/%s",pwe->pw_name); + if (stat(userspool,&finfo)<0) sendfiled_test(pwe->pw_name); +- snprintf(MAXS(userconfig),"%s/.sendfile",pwe->pw_dir); +- snprintf(MAXS(tmp),"%s/config",userspool); ++ snprintf(userconfig,sizeof(userconfig)-1,"%s/.sendfile",pwe->pw_dir); ++ snprintf(tmp,sizeof(tmp)-1,"%s/config",userspool); + if (stat(userconfig,&finfo)<0 && stat(userspool,&finfo)==0) + symlink(tmp,userconfig); +- snprintf(MAXS(tmp),"%s/.sfspool",pwe->pw_dir); ++ snprintf(tmp,sizeof(tmp)-1,"%s/.sfspool",pwe->pw_dir); + if (stat(tmp,&finfo)==0 && finfo.st_mode&S_IFDIR) strcpy(userspool,tmp); + + /* scan the command line on options */ +@@ -303,7 +303,7 @@ int main(int argc, char *argv[]) { + /* check tmp files */ + unlink(pgptmp); + if (stat(pgptmp,&finfo)==0) { +- snprintf(MAXS(tmp), ++ snprintf(tmp,sizeof(tmp)-1, + "tmp-file %s does already exist and cannot be deleted",pgptmp); + message(prg,'F',tmp); + } +@@ -332,19 +332,19 @@ int main(int argc, char *argv[]) { + } + + /* check pgp key files */ +- snprintf(MAXS(tmp),"%s/private.pgp",userconfig); ++ snprintf(tmp,sizeof(tmp)-1,"%s/private.pgp",userconfig); + if (stat(tmp,&finfo)<0) { +- snprintf(MAXS(line),"no access to %s (try 'fetchfile -I' first)",tmp); ++ snprintf(line,sizeof(line)-1,"no access to %s (try 'fetchfile -I' first)",tmp); + message(prg,'F',line); + } +- snprintf(MAXS(tmp),"%s/public.pgp",userconfig); ++ snprintf(tmp,sizeof(tmp)-1,"%s/public.pgp",userconfig); + if (stat(tmp,&finfo)<0) { +- snprintf(MAXS(line),"no access to %s (try 'fetchfile -I' first)",tmp); ++ snprintf(line,sizeof(line)-1,"no access to %s (try 'fetchfile -I' first)",tmp); + message(prg,'F',line); + } + + /* parse the user config-file */ +- snprintf(MAXS(tmp),"%s/config",userconfig); ++ snprintf(tmp,sizeof(tmp)-1,"%s/config",userconfig); + if ((inf=rfopen(tmp,"r"))) { + while (fgetl(line,inf)) { + +@@ -386,24 +386,24 @@ int main(int argc, char *argv[]) { + + if (!*id) strcpy(id,pwe->pw_name); + if (!*server) strcpy(server,"localhost"); +- snprintf(MAXS(listfile),"%s/%s@%s:fetch.lis",userspool,id,server); ++ snprintf(listfile,sizeof(listfile)-1,"%s/%s@%s:fetch.lis",userspool,id,server); + + /* initiate the connection to the server */ + if (!*server) { + errno=0; + message(prg,'F',"no SAFT server is defined"); + } +- snprintf(MAXS(tmp),"connecting to SAFT server %s",server); ++ snprintf(tmp,sizeof(tmp)-1,"connecting to SAFT server %s",server); + if (quiet<2) message(prg,'I',tmp); + #ifndef ENABLE_MULTIPROTOCOL + sockfd=open_connection(server,SAFT); + #else + sockfd=open_connection(server,SERVICE); + #endif +- if (sockfd==-1) snprintf(MAXS(tmp),"cannot create a network socket"); +- if (sockfd==-2) snprintf(MAXS(tmp),"cannot open connection to %s",server); +- if (sockfd==-3) snprintf(MAXS(tmp),"%s is unknown",server); +- if (sockfd==-4) snprintf(MAXS(tmp),"out of memory"); ++ if (sockfd==-1) snprintf(tmp,sizeof(tmp)-1,"cannot create a network socket"); ++ if (sockfd==-2) snprintf(tmp,sizeof(tmp)-1,"cannot open connection to %s",server); ++ if (sockfd==-3) snprintf(tmp,sizeof(tmp)-1,"%s is unknown",server); ++ if (sockfd==-4) snprintf(tmp,sizeof(tmp)-1,"out of memory"); + if (sockfd<0) { + errno=0; + message(prg,'F',tmp); +@@ -413,22 +413,22 @@ int main(int argc, char *argv[]) { + sock_getline(sockfd,line); + if (!str_beq(line,"220 ") || !strstr(line,"SAFT")) { + errno=0; +- snprintf(MAXS(tmp),"No SAFT server on port %d at %s",SAFT,server); ++ snprintf(tmp,sizeof(tmp)-1,"No SAFT server on port %d at %s",SAFT,server); + message(prg,'F',tmp); + } + + /* send ID */ +- snprintf(MAXS(tmp),"ID %s",id); ++ snprintf(tmp,sizeof(tmp)-1,"ID %s",id); + sock_putline(sockfd,tmp); + sock_getline(sockfd,line); + if (str_beq(line,"520")) { + errno=0; +- snprintf(MAXS(tmp),"user %s is unknown on SAFT-server %s",id,server); ++ snprintf(tmp,sizeof(tmp)-1,"user %s is unknown on SAFT-server %s",id,server); + message(prg,'F',tmp); + } + if (!str_beq(line,"331")) { + errno=0; +- snprintf(MAXS(tmp),"server error: %s",line+4); ++ snprintf(tmp,sizeof(tmp)-1,"server error: %s",line+4); + message(prg,'F',tmp); + } + str_trim(line); +@@ -440,7 +440,7 @@ int main(int argc, char *argv[]) { + outf=rfopen(pgptmp,"w"); + if (!outf) { + errno=0; +- snprintf(MAXS(tmp),"cannot open/write to %s",pgptmp); ++ snprintf(tmp,sizeof(tmp)-1,"cannot open/write to %s",pgptmp); + message(prg,'F',tmp); + } + fprintf(outf,"%s",cp+1); +@@ -448,13 +448,13 @@ int main(int argc, char *argv[]) { + + /* goto user spool directory */ + if (chdir(userspool)<0) { +- snprintf(MAXS(tmp),"cannot change to %s",userspool); ++ snprintf(tmp,sizeof(tmp)-1,"cannot change to %s",userspool); + message(prg,'F',tmp); + } + + /* call pgp */ + /* DONT REMOVE 2>/dev/null IN THE FOLLOWING LINE! */ +- snprintf(MAXS(cmd),"cd %s; PGPPATH='.' %s -sbaf " ++ snprintf(cmd,sizeof(cmd)-1,"cd %s; PGPPATH='.' %s -sbaf " + "+secring=private.pgp +pubring=public.pgp <%s 2>/dev/null", + userconfig,pgp_bin,pgptmp); + if (verbose) printf("call: %s\n",cmd); +@@ -478,7 +478,7 @@ int main(int argc, char *argv[]) { + } + + iso2utf(tmp,response); +- snprintf(MAXS(response),"AUTH %s",tmp); ++ snprintf(response,sizeof(response)-1,"AUTH %s",tmp); + sendheader(sockfd,response); + + /* config file transfer? */ +@@ -492,7 +492,7 @@ int main(int argc, char *argv[]) { + if (*tmp == '/') + strcpy(conffile,tmp); + else +- snprintf(MAXS(conffile),"%s/%s",swd,tmp); ++ snprintf(conffile,sizeof(conffile)-1,"%s/%s",swd,tmp); + + /* write config file */ + if (wconf) { +@@ -501,23 +501,23 @@ int main(int argc, char *argv[]) { + cp++; + else + cp=conffile; +- snprintf(MAXS(tmp),"CONF WRITE %s",cp); ++ snprintf(tmp,sizeof(tmp)-1,"CONF WRITE %s",cp); + sock_putline(sockfd,tmp); + sock_getline(sockfd,line); + if (!str_beq(line,"302 ") && !str_beq(line,"200 ")) { + errno=0; +- snprintf(MAXS(tmp),"server error: %s",line+4); ++ snprintf(tmp,sizeof(tmp)-1,"server error: %s",line+4); + message(prg,'F',tmp); + } + + inf=rfopen(conffile,"r"); + if (!inf) { +- snprintf(MAXS(tmp),"cannot open %s",conffile); ++ snprintf(tmp,sizeof(tmp)-1,"cannot open %s",conffile); + message(prg,'F',tmp); + } + + if (quiet<2) { +- snprintf(MAXS(tmp),"transfering %s",conffile); ++ snprintf(tmp,sizeof(tmp)-1,"transfering %s",conffile); + message(prg,'I',tmp); + } + +@@ -532,7 +532,7 @@ int main(int argc, char *argv[]) { + sock_getline(sockfd,line); + if (!str_beq(line,"201 ")) { + errno=0; +- snprintf(MAXS(tmp),"server error: %s",line+4); ++ snprintf(tmp,sizeof(tmp)-1,"server error: %s",line+4); + message(prg,'F',tmp); + } + +@@ -542,12 +542,12 @@ int main(int argc, char *argv[]) { + cp++; + else + cp=conffile; +- snprintf(MAXS(tmp),"CONF READ %s",cp); ++ snprintf(tmp,sizeof(tmp)-1,"CONF READ %s",cp); + sock_putline(sockfd,tmp); + while (sock_getline(sockfd,line)) { + if (!str_beq(line,"250")) { + errno=0; +- snprintf(MAXS(tmp),"server error: %s",line+4); ++ snprintf(tmp,sizeof(tmp)-1,"server error: %s",line+4); + message(prg,'F',tmp); + } + if (str_beq("250 ",line)) break; +@@ -592,11 +592,11 @@ int main(int argc, char *argv[]) { + number=atoi(argv[i]); + if (del) { + if (delete_file(sockfd,number)<0) { +- snprintf(MAXS(tmp),"cannot delete file #%d from server",number); ++ snprintf(tmp,sizeof(tmp)-1,"cannot delete file #%d from server",number); + errno=0; + message(prg,'E',prg); + } else { +- snprintf(MAXS(tmp),"file #%d deleted from server",number); ++ snprintf(tmp,sizeof(tmp)-1,"file #%d deleted from server",number); + if (quiet<2) message(prg,'I',tmp); + n++; + } +@@ -616,7 +616,7 @@ int main(int argc, char *argv[]) { + get_list(sockfd,server,id,listf); + fclose(listf); + } else { +- snprintf(MAXS(tmp),"cannot open %s for writing",listfile); ++ snprintf(tmp,sizeof(tmp)-1,"cannot open %s for writing",listfile); + message(prg,'F',tmp); + } + +@@ -624,7 +624,7 @@ int main(int argc, char *argv[]) { + if (all) { + listf=rfopen(listfile,"r"); + if (!listf) { +- snprintf(MAXS(tmp),"cannot open %s for reading",listfile); ++ snprintf(tmp,sizeof(tmp)-1,"cannot open %s for reading",listfile); + message(prg,'F',tmp); + } + while (fgetl(line,listf)) { +@@ -642,11 +642,11 @@ int main(int argc, char *argv[]) { + number=atoi(line); + if (del) { + if (delete_file(sockfd,number)<0) { +- snprintf(MAXS(tmp),"cannot delete file #%d (%s) from server",number,fname); ++ snprintf(tmp,sizeof(tmp)-1,"cannot delete file #%d (%s) from server",number,fname); + errno=0; + message(prg,'E',prg); + } else { +- snprintf(MAXS(tmp),"file #%d (%s) deleted from server",number,fname); ++ snprintf(tmp,sizeof(tmp)-1,"file #%d (%s) deleted from server",number,fname); + if (quiet<2) message(prg,'I',tmp); + n++; + } +@@ -666,7 +666,7 @@ int main(int argc, char *argv[]) { + for (i=optind;icsize==offset) { +- snprintf(MAXS(tmp),"file %d (%s) has been already fetched",number,fname); ++ snprintf(tmp,sizeof(tmp)-1,"file %d (%s) has been already fetched",number,fname); + message(prg,'I',tmp); + } else { + if (quiet==1) { + if (offset) +- snprintf(MAXS(tmp),"resuming fetching file %d (%s) with %ld kB", ++ snprintf(tmp,sizeof(tmp)-1,"resuming fetching file %d (%s) with %ld kB", + number,fname,(size+1023)/1024); + else +- snprintf(MAXS(tmp),"fetching file %d (%s) with %ld kB", ++ snprintf(tmp,sizeof(tmp)-1,"fetching file %d (%s) with %ld kB", + number,fname,(size+1023)/1024); + message(prg,'I',tmp); + } +@@ -1072,7 +1072,7 @@ int get_file(int sockfd, int number, int ptso) { + return(0); + } + +- snprintf(MAXS(tmp),"GET FILE %d %ld",number,offset); ++ snprintf(tmp,sizeof(tmp)-1,"GET FILE %d %ld",number,offset); + sock_putline(sockfd,tmp); + sock_getline(sockfd,line); + +@@ -1084,7 +1084,7 @@ int get_file(int sockfd, int number, int ptso) { + unlink(shfile); + } + errno=0; +- snprintf(MAXS(tmp),"server-error: %s",line+4); ++ snprintf(tmp,sizeof(tmp)-1,"server-error: %s",line+4); + message(prg,'E',tmp); + return(-1); + } +@@ -1096,7 +1096,7 @@ int get_file(int sockfd, int number, int ptso) { + + /* resend active? */ + if (offset && quiet<2) { +- snprintf(MAXS(tmp),"resuming at byte %ld",offset); ++ snprintf(tmp,sizeof(tmp)-1,"resuming at byte %ld",offset); + message("",'I',tmp); + } + +@@ -1154,10 +1154,10 @@ int get_file(int sockfd, int number, int ptso) { + if (quiet==1) { + + if (thruput>9999) +- snprintf(MAXS(tmp), ++ snprintf(tmp,sizeof(tmp)-1, + "transfer of %s completed: %.1f kB/s",fname,thruput/1024); + else +- snprintf(MAXS(tmp), ++ snprintf(tmp,sizeof(tmp)-1, + "transfer of %s completed: %d byte/s",fname,(int)thruput); + message("",'I',tmp); + +@@ -1204,10 +1204,10 @@ void init() { + printf("\nThis is the init routine for %s.\n",prg); + printf("It will create the necessary pgp files and the spool directory.\n"); + printf("You can press Ctrl-C at any time to stop this procedure.\n\n"); +- snprintf(MAXS(userspool),SPOOL"/%s",pwe->pw_name); ++ snprintf(userspool,sizeof(userspool)-1,SPOOL"/%s",pwe->pw_name); + if (stat(userspool,&finfo)<0 || !(finfo.st_mode&S_IFDIR)) { + printf("User spool %s does not exist.\n",userspool); +- snprintf(MAXS(userspool),"%s/.sfspool",pwe->pw_dir); ++ snprintf(userspool,sizeof(userspool)-1,"%s/.sfspool",pwe->pw_dir); + printf("May I create local spool %s? ",userspool); + fgetl(answer,stdin); + if (*answer!='y' && *answer!='Y') { +@@ -1233,7 +1233,7 @@ void init() { + } + + if (!(outf=rfopen(configf,"a"))) { +- snprintf(MAXS(tmp),"cannot open %s",configf); ++ snprintf(tmp,sizeof(tmp)-1,"cannot open %s",configf); + message(prg,'F',tmp); + } + printf("What is the address of your SAFT server where you want to " +@@ -1299,11 +1299,11 @@ int sendfiled_test(const char *user) { + if (!str_beq(line,"220 ") || !strstr(line,"SAFT")) return(-1); + + /* test if you can receive messages */ +- snprintf(MAXS(line),"FROM %s",user); ++ snprintf(line,sizeof(line)-1,"FROM %s",user); + sock_putline(sockfd,line); + sock_getline(sockfd,line); + if (!str_beq(line,"200 ")) return(-1); +- snprintf(MAXS(line),"TO %s",user); ++ snprintf(line,sizeof(line)-1,"TO %s",user); + sock_putline(sockfd,line); + sock_getline(sockfd,line); + if (!str_beq(line,"200 ")) return(-1); +diff --git a/src/io.c b/src/io.c +index 7e5814c..e011165 100644 +--- a/src/io.c ++++ b/src/io.c +@@ -132,7 +132,7 @@ int fcopy(const char *from, const char *to, mode_t mode) { + + /* get the original file size */ + if (stat(from,&finfo)<0) { +- snprintf(MAXS(tmp),"cannot access '%s'",from); ++ snprintf(tmp,sizeof(tmp)-1,"cannot access '%s'",from); + message("",'E',tmp); + return(-1); + } +@@ -147,7 +147,7 @@ int fcopy(const char *from, const char *to, mode_t mode) { + /* open source file */ + fdin=open(from,O_RDONLY|O_LARGEFILE,0); + if (fdin<0) { +- snprintf(MAXS(tmp),"error opening '%s'",from); ++ snprintf(tmp,sizeof(tmp)-1,"error opening '%s'",from); + message("",'E',tmp); + return(-1); + } +@@ -158,7 +158,7 @@ int fcopy(const char *from, const char *to, mode_t mode) { + /* open destination file */ + fdout=creat(to,mode); + if (fdout<0) { +- snprintf(MAXS(tmp),"error creating '%s'",to); ++ snprintf(tmp,sizeof(tmp)-1,"error creating '%s'",to); + message("",'E',tmp); + close(fdin); + return(-1); +@@ -180,7 +180,7 @@ int fcopy(const char *from, const char *to, mode_t mode) { + close(fdin); + close(fdout); + free(buf); +- snprintf(MAXS(tmp),"error writing '%s'",to); ++ snprintf(tmp,sizeof(tmp)-1,"error writing '%s'",to); + message("",'E',tmp); + return(-1); + } +@@ -212,7 +212,7 @@ int fcopy(const char *from, const char *to, mode_t mode) { + + /* read error? */ + if (rbytes<0) { +- snprintf(MAXS(tmp),"error reading '%s'",from); ++ snprintf(tmp,sizeof(tmp)-1,"error reading '%s'",from); + message("",'E',tmp); + return(-1); + } +@@ -220,7 +220,7 @@ int fcopy(const char *from, const char *to, mode_t mode) { + /* count mismatch or read/write errors? */ + if (fsize!=wtotal) { + errno=0; +- snprintf(MAXS(tmp),"wrong byte count for '%s'",from); ++ snprintf(tmp,sizeof(tmp)-1,"wrong byte count for '%s'",from); + message("",'E',tmp); + return(-1); + } +@@ -334,12 +334,12 @@ char *mktmpdir(int verbose) { + strcat(tmpdir,tmp); + + if (mkdir(tmpdir,S_IRWXU)<0 || chmod(tmpdir,S_IRWXU)<0) { +- snprintf(MAXS(tmp),"cannot create tmpdir %s",tmpdir); ++ snprintf(tmp,sizeof(tmp)-1,"cannot create tmpdir %s",tmpdir); + message("",'F',tmp); + } + + if (verbose) { +- snprintf(MAXS(tmp),"directory for temporary files is: %s",tmpdir); ++ snprintf(tmp,sizeof(tmp)-1,"directory for temporary files is: %s",tmpdir); + message("",'I',tmp); + } + +@@ -365,7 +365,7 @@ void rmtmpdir(char *tmpdir) { + /* open dir */ + if (chdir(tmpdir) < 0 || !(dp=opendir(tmpdir))) { + /* +- snprintf(MAXS(tmp),"cleanup: cannot open %s",tmpdir); ++ snprintf(tmp,sizeof(tmp)-1,"cleanup: cannot open %s",tmpdir); + message("",'X',tmp); + */ + return; +@@ -378,7 +378,7 @@ void rmtmpdir(char *tmpdir) { + + /* delete file */ + if (unlink(dire->d_name) < 0) { +- snprintf(MAXS(tmp),"cannot remove %s/%s",tmpdir,dire->d_name); ++ snprintf(tmp,sizeof(tmp)-1,"cannot remove %s/%s",tmpdir,dire->d_name); + message("",'W',tmp); + } + +@@ -386,7 +386,7 @@ void rmtmpdir(char *tmpdir) { + + chdir(cwd); + if (rmdir(tmpdir) < 0) { +- snprintf(MAXS(tmp),"cannot remove %s",tmpdir); ++ snprintf(tmp,sizeof(tmp)-1,"cannot remove %s",tmpdir); + message("",'X',tmp); + } + +@@ -483,7 +483,7 @@ int vsystem(const char *cmd) { + extern char *prg; + + if (verbose) { +- snprintf(MAXS(tmp),"shell-call: %s\n",cmd); ++ snprintf(tmp,sizeof(tmp)-1,"shell-call: %s\n",cmd); + message(prg,'I',tmp); + } + return(system(cmd)); +@@ -506,8 +506,8 @@ FILE* vpopen(const char *cmd, const char *type) { + if (verbose) { + *tmp = 0; + switch (*type) { +- case 'r': snprintf(MAXS(tmp),"shell-call: %s|",cmd); break; +- case 'w': snprintf(MAXS(tmp),"shell-call: |%s",cmd); break; ++ case 'r': snprintf(tmp,sizeof(tmp)-1,"shell-call: %s|",cmd); break; ++ case 'w': snprintf(tmp,sizeof(tmp)-1,"shell-call: |%s",cmd); break; + } + message(prg,'I',tmp); + } +diff --git a/src/net.c b/src/net.c +index eed63ac..64fcbcf 100644 +--- a/src/net.c ++++ b/src/net.c +@@ -458,7 +458,7 @@ int sock_getline(int fd, char *line) { + if (n+1==MAXLEN && line[n] != '\n') { + if (client) { + errno=0; +- snprintf(MAXS(tmp),"network socket data overrun (read bytes: %d)",n); ++ snprintf(tmp,sizeof(tmp)-1,"network socket data overrun (read bytes: %d)",n); + message("",'E',tmp); + message("",'F',line); + } +@@ -530,7 +530,7 @@ char *getreply(int fd) { + if (len<0) { + errno=0; + strcpy(msg,"server has closed the connection"); +- if (*reply) snprintf(MAXS(msg),"%s, last data: \"%s\"",msg,reply); ++ if (*reply) snprintf(msg,sizeof(msg)-1,"%s, last data: \"%s\"",msg,reply); + if (client) { + errno=0; + message("",'F',msg); +@@ -542,7 +542,7 @@ char *getreply(int fd) { + /* reply message too short? */ + if (len<4) { + errno=0; +- snprintf(MAXS(msg),"corrupt reply: \"%s\"",reply); ++ snprintf(msg,sizeof(msg)-1,"corrupt reply: \"%s\"",reply); + if (client) { + errno=0; + if (xonf) { +@@ -565,7 +565,7 @@ char *getreply(int fd) { + /* fatal server error? */ + if (reply[0]=='4') { + errno=0; +- snprintf(MAXS(msg),"server error: %s",&reply[4]); ++ snprintf(msg,sizeof(msg)-1,"server error: %s",&reply[4]); + if (client) { + errno=0; + if (xonf) { +@@ -640,7 +640,7 @@ int sendheader(int fd, char *line) { + if (str_beq(reply,"202")) return(1); + + errno=0; +- snprintf(MAXS(msg),"server error: %s",&reply[4]); ++ snprintf(msg,sizeof(msg)-1,"server error: %s",&reply[4]); + message(prg,'F',msg); + + return(-1); +@@ -725,7 +725,7 @@ int send_data(int sockfd, off_t size, const char *file, + if (!str_beq(reply,"230 ")) { + if (quiet<3) { + errno=0; +- snprintf(MAXS(tmp),"server error: %s",&reply[4]); ++ snprintf(tmp,sizeof(tmp)-1,"server error: %s",&reply[4]); + message("",'F',tmp); + } + return(-1); +@@ -742,7 +742,7 @@ int send_data(int sockfd, off_t size, const char *file, + + /* file already transmitted? */ + if (str_beq(reply,"531 ")) { +- snprintf(MAXS(tmp), ++ snprintf(tmp,sizeof(tmp)-1, + "file %s has been already transmitted - ignored.",iso_name); + if (quiet<2) message("",'W',tmp); + return(1); +@@ -751,7 +751,7 @@ int send_data(int sockfd, off_t size, const char *file, + /* server reply ok? */ + if (!str_beq(reply,"302 ")) { + if (quiet<3) { +- snprintf(MAXS(tmp),"corrupt server reply: %s",&reply[4]); ++ snprintf(tmp,sizeof(tmp)-1,"corrupt server reply: %s",&reply[4]); + errno=0; + message("",'F',tmp); + } +@@ -764,7 +764,7 @@ int send_data(int sockfd, off_t size, const char *file, + ffd=open(file,O_RDONLY,0); + if (ffd<0 || lseek(ffd,offset,SEEK_SET)<0) { + if (quiet<3) { +- snprintf(MAXS(tmp),"error reading %s",iso_name); ++ snprintf(tmp,sizeof(tmp)-1,"error reading %s",iso_name); + message("",'E',tmp); + } + return(-1); +@@ -775,12 +775,12 @@ int send_data(int sockfd, off_t size, const char *file, + + /* resend active? */ + if (offset) { +- snprintf(MAXS(tmp),"resuming %s at byte %lld",iso_name,offset); ++ snprintf(tmp,sizeof(tmp)-1,"resuming %s at byte %lld",iso_name,offset); + if (quiet<2) message("",'I',tmp); + } + + if (quiet==1) { +- snprintf(MAXS(tmp),"begin transfer of %s with %lld bytes",fname,size); ++ snprintf(tmp,sizeof(tmp)-1,"begin transfer of %s with %lld bytes",fname,size); + message("",'I',tmp); + } + +@@ -805,7 +805,7 @@ int send_data(int sockfd, off_t size, const char *file, + if (readn(ffd,packet,packet_size) 0) { + if (readn(ffd,packet,n)9999) +- snprintf(MAXS(tmp), ++ snprintf(tmp,sizeof(tmp)-1, + "transfer of %s completed: %.1f kB/s",fname,thruput/1024); + else +- snprintf(MAXS(tmp), ++ snprintf(tmp,sizeof(tmp)-1, + "transfer of %s completed: %d byte/s",fname,(int)thruput); + message("",'I',tmp); + +@@ -909,7 +909,7 @@ int send_data(int sockfd, off_t size, const char *file, + /* transfer ok? */ + if (sockfd && !str_beq(getreply(sockfd),"201 ")) { + if (quiet<3) { +- snprintf(MAXS(tmp),"transfer failed for %s",iso_name); ++ snprintf(tmp,sizeof(tmp)-1,"transfer failed for %s",iso_name); + errno=0; + message("",'E',tmp); + } +diff --git a/src/receive.c b/src/receive.c +index 50ae63e..96501b1 100644 +--- a/src/receive.c ++++ b/src/receive.c +@@ -287,11 +287,11 @@ int main(int argc, char *argv[]) { + case 'q': quiet=1; break; + case 'p': preserve=1; break; + case 'H': header=1; break; +- case 'S': snprintf(MAXS(pgpring),"%s",optarg); break; ++ case 'S': snprintf(pgpring,sizeof(pgpring)-1,"%s",optarg); break; + case 'v': opt_v="-v"; verbose=1; break; +- case 'f': snprintf(MAXS(from),"%s",optarg); break; +- case 'b': snprintf(MAXS(bounce),"%s",optarg); break; +- case 'Z': snprintf(MAXS(userspool),"%s",optarg); break; ++ case 'f': snprintf(from,sizeof(from)-1,"%s",optarg); break; ++ case 'b': snprintf(bounce,sizeof(bounce)-1,"%s",optarg); break; ++ case 'Z': snprintf(userspool,sizeof(userspool)-1,"%s",optarg); break; + case 'V': message(prg,'I',"version "VERSION" revision "REVISION""); + exit(0); + } +@@ -318,18 +318,18 @@ int main(int argc, char *argv[]) { + /* determine the spool directory */ + if (!*userspool) { + if ((cp=getenv("SF_SPOOL"))) { +- snprintf(MAXS(userspool),"%s",cp); ++ snprintf(userspool,sizeof(userspool)-1,"%s",cp); + } else { +- snprintf(MAXS(userspool),"%s/.sfspool",pwe->pw_dir); ++ snprintf(userspool,sizeof(userspool)-1,"%s/.sfspool",pwe->pw_dir); + if (stat(userspool,&finfo)<0 || !(finfo.st_mode&S_IFDIR)) +- snprintf(MAXS(userspool),SPOOL"/%s",pwe->pw_name); ++ snprintf(userspool,sizeof(userspool)-1,SPOOL"/%s",pwe->pw_name); + } + } +- if (*userspool=='Z') snprintf(MAXS(userspool),SPOOL"/%s",pwe->pw_name); ++ if (*userspool=='Z') snprintf(userspool,sizeof(userspool)-1,SPOOL"/%s",pwe->pw_name); + + /* does the spool directory exist? */ + if (stat(userspool,&finfo)<0 || (finfo.st_mode&S_IFMT)!=S_IFDIR) { +- snprintf(MAXS(tmp),"spool directory %s does not exist",userspool); ++ snprintf(tmp,sizeof(tmp)-1,"spool directory %s does not exist",userspool); + errno=0; + message(prg,'E',tmp); + exit(1); +@@ -337,7 +337,7 @@ int main(int argc, char *argv[]) { + + /* correct permissions for the spool directory? */ + if (!(finfo.st_mode&S_IRWXU) || finfo.st_uid!=getuid()) { +- snprintf(MAXS(tmp), ++ snprintf(tmp,sizeof(tmp)-1, + "no access to spool directory %s (wrong permissions)", + userspool); + errno=0; +@@ -348,7 +348,7 @@ int main(int argc, char *argv[]) { + /* are there any files to receive? */ + sls=scanspool(from); + if (sls==NULL) { +- snprintf(MAXS(tmp),"no files found in spool directory %s",userspool); ++ snprintf(tmp,sizeof(tmp)-1,"no files found in spool directory %s",userspool); + message(prg,'W',tmp); + exit(1); + } +@@ -359,7 +359,7 @@ int main(int argc, char *argv[]) { + } + + /* set log file read status (st_atime) for xhoppel */ +- snprintf(MAXS(tmp),"%s/log",userspool); ++ snprintf(tmp,sizeof(tmp)-1,"%s/log",userspool); + inf=rfopen(tmp,"r"); + if (inf) { + fgetl(tmp,inf); +@@ -420,15 +420,15 @@ int main(int argc, char *argv[]) { + + /* set tmp file names */ + tmpdir=mktmpdir(strlen(opt_v)); +- snprintf(MAXS(tartmp),"%s/receive.tar",tmpdir); +- snprintf(MAXS(fileslist),"%s/files",tmpdir); +- snprintf(MAXS(error_log),"%s/error.log",tmpdir); ++ snprintf(tartmp,sizeof(tartmp)-1,"%s/receive.tar",tmpdir); ++ snprintf(fileslist,sizeof(fileslist)-1,"%s/files",tmpdir); ++ snprintf(error_log,sizeof(error_log)-1,"%s/error.log",tmpdir); + + + /* list files? */ + if (listformat) { + if (list(sls,listformat,from,pgpring,number,argc,argv)<0) { +- snprintf(MAXS(tmp),"no files in spool directory %s",userspool); ++ snprintf(tmp,sizeof(tmp)-1,"no files in spool directory %s",userspool); + message(prg,'W',tmp); + } + cleanup(); +@@ -456,10 +456,10 @@ int main(int argc, char *argv[]) { + delete_sf(flp,1); + else if (*bounce) { + if (*bouncelist) { +- snprintf(MAXS(tmp),"%s %d",bouncelist,id); ++ snprintf(tmp,sizeof(tmp)-1,"%s %d",bouncelist,id); + strcpy(bouncelist,tmp); + } else { +- snprintf(MAXS(bouncelist),"%d",id); ++ snprintf(bouncelist,sizeof(bouncelist)-1,"%d",id); + } + } else { + receive_sf(flp,pgpring,header); +@@ -473,7 +473,7 @@ int main(int argc, char *argv[]) { + + /* not found? */ + if (!found && id) { +- snprintf(MAXS(tmp),"spool file #%d not found",id); ++ snprintf(tmp,sizeof(tmp)-1,"spool file #%d not found",id); + message(prg,'W',tmp); + status=1; + } +@@ -509,10 +509,10 @@ int main(int argc, char *argv[]) { + delete_sf(flp,1); + else if (*bounce) { + if (*bouncelist) { +- snprintf(MAXS(tmp),"%s %d",bouncelist,flp->id); ++ snprintf(tmp,sizeof(tmp)-1,"%s %d",bouncelist,flp->id); + strcpy(bouncelist,tmp); + } else +- snprintf(MAXS(bouncelist),"%d",flp->id); ++ snprintf(bouncelist,sizeof(bouncelist)-1,"%d",flp->id); + } else + receive_sf(flp,pgpring,header); + +@@ -524,7 +524,7 @@ int main(int argc, char *argv[]) { + + /* not found? */ + if (!found && !all) { +- snprintf(MAXS(tmp),"file %s not found",pattern); ++ snprintf(tmp,sizeof(tmp)-1,"file %s not found",pattern); + message(prg,'W',tmp); + status=1; + } +@@ -537,10 +537,10 @@ int main(int argc, char *argv[]) { + /* files to bounce? */ + if (*bounce && *bouncelist) { + if (keep) +- snprintf(MAXS(tmp), ++ snprintf(tmp,sizeof(tmp)-1, + "sendfile -bk=y %s %s %s",opt_v,bouncelist,bounce); + else +- snprintf(MAXS(tmp), ++ snprintf(tmp,sizeof(tmp)-1, + "sendfile -bk=n %s %s %s",opt_v,bouncelist,bounce); + vsystem(tmp); + } +@@ -668,17 +668,17 @@ int list(struct senderlist *sls, int format, char *from, char *pgpring, + + /* encrypted, compressed or normal tar file? */ + if (flp->flags&F_CRYPT) +- snprintf(MAXS(showtar),"%s %s -f < %s/%d.d | %s tvf -", ++ snprintf(showtar,sizeof(showtar)-1,"%s %s -f < %s/%d.d | %s tvf -", + pgp_bin,pgpvm,userspool,flp->id,tar_bin); + else if (flp->flags&F_COMPRESS) { + if (str_eq(flp->compress,S_BZIP2)) +- snprintf(MAXS(showtar),"%s -d < %s/%d.d | %s tvf -", ++ snprintf(showtar,sizeof(showtar)-1,"%s -d < %s/%d.d | %s tvf -", + bzip2_bin,userspool,flp->id,tar_bin); + else +- snprintf(MAXS(showtar),"%s -d < %s/%d.d | %s tvf -", ++ snprintf(showtar,sizeof(showtar)-1,"%s -d < %s/%d.d | %s tvf -", + gzip_bin,userspool,flp->id,tar_bin); + } else { +- snprintf(MAXS(showtar),"%s tvf %s/%d.d",tar_bin,userspool,flp->id); ++ snprintf(showtar,sizeof(showtar)-1,"%s tvf %s/%d.d",tar_bin,userspool,flp->id); + } + + /* sneak inside... */ +@@ -760,16 +760,16 @@ void receive_sf(struct filelist *flp, char *pgpring, int header) { + if (*pgpring) { + switch (check_signature(flp,pgpring,0)) { + case 1: break; +- case 0: snprintf(MAXS(tmp),"no signature found for '%s'",nname); ++ case 0: snprintf(tmp,sizeof(tmp)-1,"no signature found for '%s'",nname); + errno=0; + message(prg,'E',tmp); + return; +- case -1: snprintf(MAXS(tmp),"no public key found to check " ++ case -1: snprintf(tmp,sizeof(tmp)-1,"no public key found to check " + "signature for '%s'",nname); + errno=0; + message(prg,'E',tmp); + return; +- case -2: snprintf(MAXS(tmp),"bad signature for '%s'",nname); ++ case -2: snprintf(tmp,sizeof(tmp)-1,"bad signature for '%s'",nname); + errno=0; + message(prg,'E',tmp); + return; +@@ -785,7 +785,7 @@ void receive_sf(struct filelist *flp, char *pgpring, int header) { + + /* show only the header? */ + if (header) { +- snprintf(MAXS(tmp),"%s/%d.h",userspool,flp->id); ++ snprintf(tmp,sizeof(tmp)-1,"%s/%d.h",userspool,flp->id); + printf("%d) %s\n",flp->id,nname); + inf=rfopen(tmp,"r"); + while (fgetl(line,inf)) printf("%s",line); +@@ -799,10 +799,10 @@ void receive_sf(struct filelist *flp, char *pgpring, int header) { + + /* encrypted spool file? */ + if (flp->flags&F_CRYPT) { +- snprintf(MAXS(cmd),"%s %s -f < %s/%d.d",pgp_bin,pgpvm,userspool,flp->id); ++ snprintf(cmd,sizeof(cmd)-1,"%s %s -f < %s/%d.d",pgp_bin,pgpvm,userspool,flp->id); + if (vsystem(cmd)!=0) { + errno=0; +- snprintf(MAXS(tmp),"cannot decrypt '%s' :",nname); ++ snprintf(tmp,sizeof(tmp)-1,"cannot decrypt '%s' :",nname); + message(prg,'E',tmp); + return; + } +@@ -810,12 +810,12 @@ void receive_sf(struct filelist *flp, char *pgpring, int header) { + /* compressed spool file? */ + else if (flp->flags&F_COMPRESS) { + if (str_eq(flp->compress,S_BZIP2)) +- snprintf(MAXS(cmd),"%s -d < %s/%d.d",bzip2_bin,userspool,flp->id); ++ snprintf(cmd,sizeof(cmd)-1,"%s -d < %s/%d.d",bzip2_bin,userspool,flp->id); + else +- snprintf(MAXS(cmd),"%s -d < %s/%d.d",gzip_bin,userspool,flp->id); ++ snprintf(cmd,sizeof(cmd)-1,"%s -d < %s/%d.d",gzip_bin,userspool,flp->id); + if (vsystem(cmd)!=0 && !(flp->flags&F_TAR)) { + errno=0; +- snprintf(MAXS(tmp),"cannot decompress '%s' :",nname); ++ snprintf(tmp,sizeof(tmp)-1,"cannot decompress '%s' :",nname); + message(prg,'E',tmp); + return; + } +@@ -823,10 +823,10 @@ void receive_sf(struct filelist *flp, char *pgpring, int header) { + else /* copy spool file to stdout */ { + + /* copy file */ +- snprintf(MAXS(tmp),"%s/%d.d",userspool,flp->id); ++ snprintf(tmp,sizeof(tmp)-1,"%s/%d.d",userspool,flp->id); + if (fcopy(tmp,"",0)<0) { + errno=0; +- snprintf(MAXS(tmp),"cannot read '%s'",nname); ++ snprintf(tmp,sizeof(tmp)-1,"cannot read '%s'",nname); + message(prg,'E',tmp); + return; + } +@@ -865,9 +865,9 @@ void receive_sf(struct filelist *flp, char *pgpring, int header) { + if (!quiet && checkfile(utf,fname,nname,sname,&overwrite)) return; + + /* copy file */ +- snprintf(MAXS(tmp),"%s/%d.d",userspool,flp->id); ++ snprintf(tmp,sizeof(tmp)-1,"%s/%d.d",userspool,flp->id); + if (fcopy(tmp,fname,0666&~cmask)<0) { +- snprintf(MAXS(tmp),"cannot receive '%s'",nname); ++ snprintf(tmp,sizeof(tmp)-1,"cannot receive '%s'",nname); + errno=0; + message(prg,'E',tmp); + return; +@@ -877,7 +877,7 @@ void receive_sf(struct filelist *flp, char *pgpring, int header) { + create_sigfile(flp->sign,fname,nname,&overwrite); + + if (!keep) delete_sf(flp,0); +- snprintf(MAXS(tmp),"'%s' received",nname); ++ snprintf(tmp,sizeof(tmp)-1,"'%s' received",nname); + message(prg,'I',tmp); + + return; +@@ -886,14 +886,14 @@ void receive_sf(struct filelist *flp, char *pgpring, int header) { + /* encrypted tar spool file? */ + if (flp->flags&F_CRYPT) { + +- snprintf(MAXS(cmd),"%s %s -f < %s/%d.d > %s", ++ snprintf(cmd,sizeof(cmd)-1,"%s %s -f < %s/%d.d > %s", + pgp_bin,pgpvm,userspool,flp->id,tartmp); + + /* create temporary decrypted tar file */ + vsystem(cmd); + if (stat(tartmp,&finfo)<0 || finfo.st_size==0) { + errno=0; +- snprintf(MAXS(tmp),"cannot decrypt '%s' :",nname); ++ snprintf(tmp,sizeof(tmp)-1,"cannot decrypt '%s' :",nname); + message(prg,'E',tmp); + return; + } +@@ -914,15 +914,15 @@ void receive_sf(struct filelist *flp, char *pgpring, int header) { + /* compressed, encrypted or normal tar file? */ + if (flp->flags&F_COMPRESS) { + if (str_eq(flp->compress,S_BZIP2)) +- snprintf(MAXS(cmd),"%s -d < %s/%d.d | %s tvf -", ++ snprintf(cmd,sizeof(cmd)-1,"%s -d < %s/%d.d | %s tvf -", + bzip2_bin,userspool,flp->id,tar_bin); + else +- snprintf(MAXS(cmd),"%s -d < %s/%d.d | %s tvf -", ++ snprintf(cmd,sizeof(cmd)-1,"%s -d < %s/%d.d | %s tvf -", + gzip_bin,userspool,flp->id,tar_bin); + } else if (flp->flags&F_CRYPT) { +- snprintf(MAXS(cmd),"%s tvf %s",tar_bin,tartmp); ++ snprintf(cmd,sizeof(cmd)-1,"%s tvf %s",tar_bin,tartmp); + } else { +- snprintf(MAXS(cmd),"%s tvf %s/%d.d",tar_bin,userspool,flp->id); ++ snprintf(cmd,sizeof(cmd)-1,"%s tvf %s/%d.d",tar_bin,userspool,flp->id); + } + + /* open pipe to read tar file-info */ +@@ -949,15 +949,15 @@ void receive_sf(struct filelist *flp, char *pgpring, int header) { + /* compressed, encrypted or normal tar file? */ + if (flp->flags&F_COMPRESS) { + if (str_eq(flp->compress,S_BZIP2)) +- snprintf(MAXS(cmd),"%s -d < %s/%d.d | %s tf -", ++ snprintf(cmd,sizeof(cmd)-1,"%s -d < %s/%d.d | %s tf -", + bzip2_bin,userspool,flp->id,tar_bin); + else +- snprintf(MAXS(cmd),"%s -d < %s/%d.d | %s tf -", ++ snprintf(cmd,sizeof(cmd)-1,"%s -d < %s/%d.d | %s tf -", + gzip_bin,userspool,flp->id,tar_bin); + } else if (flp->flags&F_CRYPT) { +- snprintf(MAXS(cmd),"%s tf %s",tar_bin,tartmp); ++ snprintf(cmd,sizeof(cmd)-1,"%s tf %s",tar_bin,tartmp); + } else { +- snprintf(MAXS(cmd),"%s tf %s/%d.d",tar_bin,userspool,flp->id); ++ snprintf(cmd,sizeof(cmd)-1,"%s tf %s/%d.d",tar_bin,userspool,flp->id); + } + + /* open pipe to read tar file-info */ +@@ -1016,21 +1016,21 @@ void receive_sf(struct filelist *flp, char *pgpring, int header) { + } + + /* receive from tar file */ +- snprintf(MAXS(tmp),"receiving from archive '%s' :",nname); ++ snprintf(tmp,sizeof(tmp)-1,"receiving from archive '%s' :",nname); + message(prg,'I',tmp); + + /* compressed, encrypted or normal tar file? */ + if (flp->flags&F_COMPRESS) { + if (str_eq(flp->compress,S_BZIP2)) +- snprintf(MAXS(cmd),"%s -d < %s/%d.d | %s xvf - 2>%s", ++ snprintf(cmd,sizeof(cmd)-1,"%s -d < %s/%d.d | %s xvf - 2>%s", + bzip2_bin,userspool,flp->id,tar_bin,error_log); + else +- snprintf(MAXS(cmd),"%s -d < %s/%d.d | %s xvf - 2>%s", ++ snprintf(cmd,sizeof(cmd)-1,"%s -d < %s/%d.d | %s xvf - 2>%s", + gzip_bin,userspool,flp->id,tar_bin,error_log); + } else if (flp->flags&F_CRYPT) +- snprintf(MAXS(cmd),"%s xvf %s 2>%s",tar_bin,tartmp,error_log); ++ snprintf(cmd,sizeof(cmd)-1,"%s xvf %s 2>%s",tar_bin,tartmp,error_log); + else +- snprintf(MAXS(cmd),"%s xvf %s/%d.d 2>%s", ++ snprintf(cmd,sizeof(cmd)-1,"%s xvf %s/%d.d 2>%s", + tar_bin,userspool,flp->id,error_log); + + /* receive tar archive and check for errors */ +@@ -1044,7 +1044,7 @@ void receive_sf(struct filelist *flp, char *pgpring, int header) { + !simplematch(line,TAR": Could not create symlink*File exists*",1)) { + if (!terr) { + terr=1; +- snprintf(MAXS(tmp),"errors while receive '%s' :",nname); ++ snprintf(tmp,sizeof(tmp)-1,"errors while receive '%s' :",nname); + message(prg,'E',tmp); + } + printf("%s",line); +@@ -1055,7 +1055,7 @@ void receive_sf(struct filelist *flp, char *pgpring, int header) { + + /* was there an error with tar? */ + if (terr) { +- snprintf(MAXS(tmp),"leaving '%s' in spool intact",nname); ++ snprintf(tmp,sizeof(tmp)-1,"leaving '%s' in spool intact",nname); + message(prg,'I',tmp); + } else { + +@@ -1108,7 +1108,7 @@ void receive_sf(struct filelist *flp, char *pgpring, int header) { + /* safety fallback: try to delete an old file with the same name */ + unlink(fname); + if (stat(fname,&finfo)==0) { +- snprintf(MAXS(tmp),"cannot create '%s' : " ++ snprintf(tmp,sizeof(tmp)-1,"cannot create '%s' : " + "file does already exist and is not deletable",fname); + errno=0; + message(prg,'E',tmp); +@@ -1119,16 +1119,16 @@ void receive_sf(struct filelist *flp, char *pgpring, int header) { + if (preserve && flp->flags&F_CRYPT) { + + /* copy file */ +- snprintf(MAXS(tmp),"%s/%d.d",userspool,flp->id); ++ snprintf(tmp,sizeof(tmp)-1,"%s/%d.d",userspool,flp->id); + if (fcopy(tmp,fname,0666&~cmask)<0) { +- snprintf(MAXS(tmp),"cannot receive '%s'",nname); ++ snprintf(tmp,sizeof(tmp)-1,"cannot receive '%s'",nname); + errno=0; + message(prg,'E',tmp); + return; + } + + if ((flp->flags&F_SOURCE || flp->flags&F_TEXT) && !quiet) { +- snprintf(MAXS(tmp), ++ snprintf(tmp,sizeof(tmp)-1, + "'%s' has a SOURCE or TEXT attribute, you have to decode it " + "after pgp-decrypting with: recode %s:"CHARSET" '%s'", + nname,flp->charset,nname); +@@ -1136,7 +1136,7 @@ void receive_sf(struct filelist *flp, char *pgpring, int header) { + } + + if (flp->flags&F_MIME && !quiet) { +- snprintf(MAXS(tmp), ++ snprintf(tmp,sizeof(tmp)-1, + "'%s' has the MIME attribute, you have to run it through" + "metamail after pgp-decrypting",nname); + message(prg,'W',tmp); +@@ -1146,7 +1146,7 @@ void receive_sf(struct filelist *flp, char *pgpring, int header) { + create_sigfile(flp->sign,fname,nname,&overwrite); + + if (!keep) delete_sf(flp,0); +- snprintf(MAXS(tmp),"'%s' received",nname); ++ snprintf(tmp,sizeof(tmp)-1,"'%s' received",nname); + message(prg,'I',tmp); + + return; +@@ -1161,11 +1161,11 @@ void receive_sf(struct filelist *flp, char *pgpring, int header) { + /* open pipe to uncompress or decrypt spool file */ + if (flp->flags&F_COMPRESS) { + if (str_eq(flp->compress,S_BZIP2)) +- snprintf(MAXS(cmd),"%s -d < %s/%d.d",bzip2_bin,userspool,flp->id); ++ snprintf(cmd,sizeof(cmd)-1,"%s -d < %s/%d.d",bzip2_bin,userspool,flp->id); + else +- snprintf(MAXS(cmd),"%s -d < %s/%d.d",gzip_bin,userspool,flp->id); ++ snprintf(cmd,sizeof(cmd)-1,"%s -d < %s/%d.d",gzip_bin,userspool,flp->id); + } else if (flp->flags&F_CRYPT) +- snprintf(MAXS(cmd), ++ snprintf(cmd,sizeof(cmd)-1, + "%s %s -f < %s/%d.d",pgp_bin,pgpvm,userspool,flp->id); + if ((pp=vpopen(cmd,"r")) == NULL) { + message(prg,'E',"cannot open spool file for reading"); +@@ -1176,7 +1176,7 @@ void receive_sf(struct filelist *flp, char *pgpring, int header) { + if (!(outf=rfopen(fname,"w"))) { + pclose(pp); + printf("\n"); +- snprintf(MAXS(tmp),"cannot open '%s' for writing",nname); ++ snprintf(tmp,sizeof(tmp)-1,"cannot open '%s' for writing",nname); + message(prg,'E',tmp); + return; + } +@@ -1192,12 +1192,12 @@ void receive_sf(struct filelist *flp, char *pgpring, int header) { + + } else /* binary format */ { + +- snprintf(MAXS(sfile),"%s/%d.d",userspool,flp->id); ++ snprintf(sfile,sizeof(sfile)-1,"%s/%d.d",userspool,flp->id); + + /* try to create destination file */ + /* open output file */ + if (!(outf=rfopen(fname,"w"))) { +- snprintf(MAXS(tmp),"cannot open '%s' for writing",nname); ++ snprintf(tmp,sizeof(tmp)-1,"cannot open '%s' for writing",nname); + message(prg,'E',tmp); + return; + } +@@ -1215,16 +1215,16 @@ void receive_sf(struct filelist *flp, char *pgpring, int header) { + *++cp=0; + else + *tmp=0; +- snprintf(MAXS(tmpfile),"%sreceive-%d.tmp",tmp,(int)getpid()); +- snprintf(MAXS(tmp),"%s -d < %s > %s",bzip2_bin,sfile,tmpfile); ++ snprintf(tmpfile,sizeof(tmpfile)-1,"%sreceive-%d.tmp",tmp,(int)getpid()); ++ snprintf(tmp,sizeof(tmp)-1,"%s -d < %s > %s",bzip2_bin,sfile,tmpfile); + if (vsystem(tmp)) { +- snprintf(MAXS(tmp),"call to %s failed, cannot receive '%s'", ++ snprintf(tmp,sizeof(tmp)-1,"call to %s failed, cannot receive '%s'", + bzip2_bin,nname); + message(prg,'E',tmp); + return; + } + if (rename(tmpfile,fname)<0) { +- snprintf(MAXS(tmp),"cannot write to '%s'",nname); ++ snprintf(tmp,sizeof(tmp)-1,"cannot write to '%s'",nname); + message(prg,'E',tmp); + unlink(tmpfile); + return; +@@ -1239,7 +1239,7 @@ void receive_sf(struct filelist *flp, char *pgpring, int header) { + + if (spawn(sad,fname,cmask)<0) { + errno=0; +- snprintf(MAXS(tmp), ++ snprintf(tmp,sizeof(tmp)-1, + "call to %s failed, cannot receive '%s'",sad[0],nname); + message(prg,'E',tmp); + return; +@@ -1252,10 +1252,10 @@ void receive_sf(struct filelist *flp, char *pgpring, int header) { + /* encrypted spool file? */ + if (flp->flags&F_CRYPT) { + +- snprintf(MAXS(cmd),"%s %s -f < %s > '%s'",pgp_bin,pgpvm,sfile,fname); ++ snprintf(cmd,sizeof(cmd)-1,"%s %s -f < %s > '%s'",pgp_bin,pgpvm,sfile,fname); + if (vsystem(cmd)!=0) { + errno=0; +- snprintf(MAXS(tmp),"cannot receive '%s', pgp failed",nname); ++ snprintf(tmp,sizeof(tmp)-1,"cannot receive '%s', pgp failed",nname); + message(prg,'E',tmp); + unlink(fname); + return; +@@ -1274,7 +1274,7 @@ void receive_sf(struct filelist *flp, char *pgpring, int header) { + !(flp->flags&F_CRYPT)) { + + /* open input file */ +- snprintf(MAXS(sfile),"%s/%d.d",userspool,flp->id); ++ snprintf(sfile,sizeof(sfile)-1,"%s/%d.d",userspool,flp->id); + if ((inf=rfopen(sfile,"r")) == NULL) { + message(prg,'E',"cannot open spool file for reading"); + return; +@@ -1282,7 +1282,7 @@ void receive_sf(struct filelist *flp, char *pgpring, int header) { + + /* open output file */ + if ((outf=rfopen(fname,"w")) == NULL) { +- snprintf(MAXS(tmp),"cannot open '%s' for writing",nname); ++ snprintf(tmp,sizeof(tmp)-1,"cannot open '%s' for writing",nname); + message(prg,'E',tmp); + fclose(inf); + return; +@@ -1298,9 +1298,9 @@ void receive_sf(struct filelist *flp, char *pgpring, int header) { + } else /* binary file */ { + + /* copy file */ +- snprintf(MAXS(tmp),"%s/%d.d",userspool,flp->id); ++ snprintf(tmp,sizeof(tmp)-1,"%s/%d.d",userspool,flp->id); + if (fcopy(tmp,fname,0666&~cmask)<0) { +- snprintf(MAXS(tmp),"cannot receive '%s'",nname); ++ snprintf(tmp,sizeof(tmp)-1,"cannot receive '%s'",nname); + errno=0; + message(prg,'E',tmp); + return; +@@ -1315,20 +1315,20 @@ void receive_sf(struct filelist *flp, char *pgpring, int header) { + /* executable flag set? */ + if (flp->flags&F_EXE) chmod(fname,(S_IRWXU|S_IRWXG|S_IRWXO)&~cmask); + +- snprintf(MAXS(tmp),"'%s' received",nname); ++ snprintf(tmp,sizeof(tmp)-1,"'%s' received",nname); + message(prg,'I',tmp); + + /* foreign character set in text file? */ + if ((flp->flags&F_TEXT) && !str_eq(flp->charset,CHARSET)) { + + /* call GNU recode */ +- snprintf(MAXS(tmp),"%s:"CHARSET,flp->charset); ++ snprintf(tmp,sizeof(tmp)-1,"%s:"CHARSET,flp->charset); + sad[0]=recode_bin; + sad[1]=tmp; + sad[2]=fname; + sad[3]=NULL; + if (spawn(sad,NULL,cmask)<0) { +- snprintf(MAXS(tmp), ++ snprintf(tmp,sizeof(tmp)-1, + "call to %s failed, cannot translate character set in '%s'", + recode_bin,nname); + message(prg,'E',tmp); +@@ -1348,7 +1348,7 @@ void receive_sf(struct filelist *flp, char *pgpring, int header) { + + /* metamail call allowed? */ + if (nometamail) { +- snprintf(MAXS(tmp), ++ snprintf(tmp,sizeof(tmp)-1, + "'%s' is a MIME file, you have to run it through metamail", + nname); + message(prg,'I',tmp); +@@ -1360,7 +1360,7 @@ void receive_sf(struct filelist *flp, char *pgpring, int header) { + sad[1]=fname; + sad[2]=NULL; + if (spawn(sad,NULL,cmask)<0) { +- snprintf(MAXS(tmp), ++ snprintf(tmp,sizeof(tmp)-1, + "call to %s failed, keeping local file '%s'", + metamail_bin,nname); + message(prg,'E',tmp); +@@ -1403,7 +1403,7 @@ void crlf2lf(FILE *inf, FILE *outf, const char *fname, const char *nname) { + + /* write lf */ + if(fputc(c2,outf)==EOF) { +- snprintf(MAXS(tmp),"cannot write to %s",nname); ++ snprintf(tmp,sizeof(tmp)-1,"cannot write to %s",nname); + message(prg,'E',tmp); + return; + } +@@ -1415,7 +1415,7 @@ void crlf2lf(FILE *inf, FILE *outf, const char *fname, const char *nname) { + + /* write char */ + if(fputc(c1,outf)==EOF) { +- snprintf(MAXS(tmp),"cannot write to %s",nname); ++ snprintf(tmp,sizeof(tmp)-1,"cannot write to %s",nname); + message(prg,'E',tmp); + return; + } +@@ -1426,7 +1426,7 @@ void crlf2lf(FILE *inf, FILE *outf, const char *fname, const char *nname) { + + /* write last char */ + if(fputc(c1,outf)==EOF) { +- snprintf(MAXS(tmp),"cannot write to %s",nname); ++ snprintf(tmp,sizeof(tmp)-1,"cannot write to %s",nname); + message(prg,'E',tmp); + return; + } +@@ -1607,8 +1607,8 @@ int create_sigfile(const char *sign, const char *fname, const char *nname, + /* no pgp signature to save? */ + if (!*sign) return(0); + +- snprintf(MAXS(sigfile),"%s.sig",fname); +- snprintf(MAXS(nsigfile),"%s.sig",nname); ++ snprintf(sigfile,sizeof(sigfile)-1,"%s.sig",fname); ++ snprintf(nsigfile,sizeof(nsigfile)-1,"%s.sig",nname); + + /* signature file does already exist? */ + while (stat(sigfile,&finfo)==0 && (*overwrite!='Y')) { +@@ -1641,7 +1641,7 @@ int create_sigfile(const char *sign, const char *fname, const char *nname, + /* safety fallback: try to delete an old file with the same name */ + unlink(fname); + if (stat(sigfile,&finfo)==0) { +- snprintf(MAXS(tmp),"cannot create '%s' : " ++ snprintf(tmp,sizeof(tmp)-1,"cannot create '%s' : " + "file does already exist and is not deletable",sigfile); + errno=0; + message(prg,'E',tmp); +@@ -1649,14 +1649,14 @@ int create_sigfile(const char *sign, const char *fname, const char *nname, + } + + if (!(outf=rfopen(sigfile,"w"))) { +- snprintf(MAXS(tmp),"cannot create signature file '%s' ",nsigfile); ++ snprintf(tmp,sizeof(tmp)-1,"cannot create signature file '%s' ",nsigfile); + message(prg,'E',tmp); + return(-1); + } + + fprintf(outf,"%s",sign); + fclose(outf); +- snprintf(MAXS(tmp),"signature file '%s' created",nsigfile); ++ snprintf(tmp,sizeof(tmp)-1,"signature file '%s' created",nsigfile); + message(prg,'I',tmp); + return(0); + +@@ -1695,9 +1695,9 @@ int check_signature(struct filelist *flp, char *pgpring, int print) { + if (str_eq(pgpring,".")) *pgpring=0; + + /* write signature file */ +- snprintf(MAXS(sigfile),"%s/%d.d.sig",userspool,flp->id); ++ snprintf(sigfile,sizeof(sigfile)-1,"%s/%d.d.sig",userspool,flp->id); + if (!(outf=rfopen(sigfile,"w"))) { +- snprintf(MAXS(tmp),"cannot write signature file %s",sigfile); ++ snprintf(tmp,sizeof(tmp)-1,"cannot write signature file %s",sigfile); + message(prg,'E',tmp); + return(-2); + } +@@ -1707,15 +1707,15 @@ int check_signature(struct filelist *flp, char *pgpring, int print) { + /* build pgp options */ + if (*pgpring) { + if (access(pgpring,R_OK)<0) { +- snprintf(MAXS(tmp),"cannot read pgp pub ring file %s",pgpring); ++ snprintf(tmp,sizeof(tmp)-1,"cannot read pgp pub ring file %s",pgpring); + message(prg,'F',tmp); + } +- snprintf(MAXS(pgpopt),"+batchmode=on +language=en +pubring=%s",pgpring); ++ snprintf(pgpopt,sizeof(pgpopt)-1,"+batchmode=on +language=en +pubring=%s",pgpring); + } else +- snprintf(MAXS(pgpopt),"+batchmode=on +language=en"); ++ snprintf(pgpopt,sizeof(pgpopt)-1,"+batchmode=on +language=en"); + + /* check signature file with pgp */ +- snprintf(MAXS(tmp),"%s %s %s 2>/dev/null",pgp_bin,pgpopt,sigfile); ++ snprintf(tmp,sizeof(tmp)-1,"%s %s %s 2>/dev/null",pgp_bin,pgpopt,sigfile); + if (!(pp=vpopen(tmp,"r"))) { + message(prg,'E',"cannot call pgp"); + unlink(sigfile); +@@ -1789,7 +1789,7 @@ void renumber (struct senderlist *sls) { + max = nextfree = 1; + + if (chdir(userspool)<0) { +- snprintf(MAXS(tmp),"cannot change to %s",userspool); ++ snprintf(tmp,sizeof(tmp)-1,"cannot change to %s",userspool); + message(prg,'F',tmp); + } + +@@ -1816,20 +1816,20 @@ void renumber (struct senderlist *sls) { + while (fscanf(lockf,"%d\n",&i)!=EOF) { + if (ilastused && i>nextfree) min=i; + } +- snprintf(MAXS(ofile),"%d.h",min); ++ snprintf(ofile,sizeof(ofile)-1,"%d.h",min); + for (i=nextfree; i&1",bzip2_bin); ++ snprintf(tmp,sizeof(tmp)-1,"%s --help 2>&1",bzip2_bin); + if ((pp=popen(tmp,"r"))) { + while (fgetl(line,pp)) { + if (strstr(line,"usage:")) { +@@ -678,7 +678,7 @@ const char + } + if (!*zprg) *bzip2_bin=0; + +- snprintf(MAXS(tmp),"%s --help 2>&1",gzip_bin); ++ snprintf(tmp,sizeof(tmp)-1,"%s --help 2>&1",gzip_bin); + if ((pp=popen(tmp,"r"))) { + while (fgetl(line,pp)) if (strstr(line,"usage:")) break; + pclose(pp); +@@ -719,7 +719,7 @@ const char + if (str_eq(host,"127.0.0.1") || str_eq(host,"0")) strcpy(host,localhost); + + if (*aopt) { +- snprintf(MAXS(cmd),"%s %s ",argv[0],aopt); ++ snprintf(cmd,sizeof(cmd)-1,"%s %s ",argv[0],aopt); + for(i=1;i'\n') { +@@ -796,7 +796,7 @@ const char + /* is there a signature id? */ + if (*pop>'\n') { + if (*pop=='=') pop++; +- snprintf(MAXS(pgpsign),"-u '%s",pop); ++ snprintf(pgpsign,sizeof(pgpsign)-1,"-u '%s",pop); + + /* cut off any more options */ + if ((cp=strchr(pgpsign,'\n'))) { +@@ -813,7 +813,7 @@ const char + + /* wrong pgp options */ + errno=0; +- snprintf(MAXS(tmp),"wrong pgp option, see 'man %s'",prg); ++ snprintf(tmp,sizeof(tmp)-1,"wrong pgp option, see 'man %s'",prg); + message(prg,'F',tmp); + + } +@@ -821,13 +821,13 @@ const char + } + + /* set various file names */ +- snprintf(MAXS(userspool),SPOOL"/%s",pw_name); +- snprintf(MAXS(outlogtmp),"%s/.sendfile_%d.log",userspool,pid); +- snprintf(MAXS(tartmp),"%s/sendfile.tar",tmpdir); +- snprintf(MAXS(ziptmp),"%s/sendfile.zip",tmpdir); +- snprintf(MAXS(pgptmp),"%s/sendfile.pgp",tmpdir); +- snprintf(MAXS(texttmp),"%s/sendfile.txt",tmpdir); +- snprintf(MAXS(stdintmp),"%s/sendfile.tmp",tmpdir); ++ snprintf(userspool,sizeof(userspool)-1,SPOOL"/%s",pw_name); ++ snprintf(outlogtmp,sizeof(outlogtmp)-1,"%s/.sendfile_%d.log",userspool,pid); ++ snprintf(tartmp,sizeof(tartmp)-1,"%s/sendfile.tar",tmpdir); ++ snprintf(ziptmp,sizeof(ziptmp)-1,"%s/sendfile.zip",tmpdir); ++ snprintf(pgptmp,sizeof(pgptmp)-1,"%s/sendfile.pgp",tmpdir); ++ snprintf(texttmp,sizeof(texttmp)-1,"%s/sendfile.txt",tmpdir); ++ snprintf(stdintmp,sizeof(stdintmp)-1,"%s/sendfile.tmp",tmpdir); + + /* where are the files/directories ? */ + if (*where) { +@@ -845,11 +845,11 @@ const char + if (quiet) + printf("%s\n",userspool); + else { +- snprintf(MAXS(tmp),"the user spool directory is: %s",userspool); ++ snprintf(tmp,sizeof(tmp)-1,"the user spool directory is: %s",userspool); + message(prg,'I',tmp); + } + } else { +- snprintf(MAXS(tmp),"%s is an unknown -W argument",where); ++ snprintf(tmp,sizeof(tmp)-1,"%s is an unknown -W argument",where); + errno=0; + message(prg,'E',tmp); + if (quiet<2) message(prg,'I',"you may specify -W=config, -W=spool, or " +@@ -865,27 +865,27 @@ const char + unlink(pgptmp); + unlink(stdintmp); + if (stat(tartmp,&finfo)==0) { +- snprintf(MAXS(tmp), ++ snprintf(tmp,sizeof(tmp)-1, + "tmp-file %s does already exist and cannot be deleted",tartmp); + message(prg,'F',tmp); + } + if (stat(ziptmp,&finfo)==0) { +- snprintf(MAXS(tmp), ++ snprintf(tmp,sizeof(tmp)-1, + "tmp-file %s does already exist and cannot be deleted",ziptmp); + message(prg,'F',tmp); + } + if (stat(texttmp,&finfo)==0) { +- snprintf(MAXS(tmp), ++ snprintf(tmp,sizeof(tmp)-1, + "tmp-file %s does already exist and cannot be deleted",texttmp); + message(prg,'F',tmp); + } + if (stat(pgptmp,&finfo)==0) { +- snprintf(MAXS(tmp), ++ snprintf(tmp,sizeof(tmp)-1, + "tmp-file %s does already exist and cannot be deleted",pgptmp); + message(prg,'F',tmp); + } + if (stat(stdintmp,&finfo)==0) { +- snprintf(MAXS(tmp), ++ snprintf(tmp,sizeof(tmp)-1, + "tmp-file %s does already exist and cannot be deleted",stdintmp); + message(prg,'F',tmp); + } +@@ -954,7 +954,7 @@ const char + /* set tcp packet length */ + if (packet_size<1) packet_size=PACKET; + if (verbose && !spool && !del) { +- snprintf(MAXS(tmp),"packet size = %d bytes",packet_size); ++ snprintf(tmp,sizeof(tmp)-1,"packet size = %d bytes",packet_size); + message(prg,'I',tmp); + } + +@@ -970,14 +970,14 @@ const char + + /* write stdin to tmp-file */ + if (!(outf=rfopen(stdintmp,"w"))) { +- snprintf(MAXS(tmp),"cannot open tmp-file %s",stdintmp); ++ snprintf(tmp,sizeof(tmp)-1,"cannot open tmp-file %s",stdintmp); + message(prg,'F',tmp); + } + /* while ((ch=getchar())!=EOF) putc(ch,outf); */ + while ((bytes=read(fileno(stdin),iobuf,IOB))) { + if (bytes<0) message(prg,'F',"error while reading from stdin"); + if (write(fileno(outf),iobuf,bytes)!=bytes) { +- snprintf(MAXS(tmp),"error while writing stdin to %s",stdintmp); ++ snprintf(tmp,sizeof(tmp)-1,"error while writing stdin to %s",stdintmp); + message(prg,'F',tmp); + } + } +@@ -1022,13 +1022,13 @@ const char + /* does the outgoing spool exist? */ + strcpy(outgoing,SPOOL"/OUTGOING"); + if (stat(outgoing,&finfo)<0 || !S_ISDIR(finfo.st_mode)) { +- snprintf(MAXS(tmp),"spool directory %s does not exist",outgoing); ++ snprintf(tmp,sizeof(tmp)-1,"spool directory %s does not exist",outgoing); + message(prg,'F',tmp); + } + + /* and does it have the correct protection? */ + if (!((finfo.st_mode&S_ISVTX) && (finfo.st_mode&S_IRWXO))) { +- snprintf(MAXS(tmp), ++ snprintf(tmp,sizeof(tmp)-1, + "spool directory %s has wrong protection (must have 1777)", + outgoing); + message(prg,'F',tmp); +@@ -1045,19 +1045,19 @@ const char + + /* does the spool directory exist? */ + if (chdir(userspool)<0) { +- snprintf(MAXS(tmp),"cannot access spool directory %s",userspool); ++ snprintf(tmp,sizeof(tmp)-1,"cannot access spool directory %s",userspool); + message(prg,'F',tmp); + } + + /* main loop over the spool file names */ + for (fn=optind; fn%s",BZIP2,sdfn,GZIP,ziptmp); ++ snprintf(cmd,sizeof(cmd)-1,"%s -d <%s|%s>%s",BZIP2,sdfn,GZIP,ziptmp); + else +- snprintf(MAXS(cmd),"%s -d < %s > %s",BZIP2,sdfn,ziptmp); ++ snprintf(cmd,sizeof(cmd)-1,"%s -d < %s > %s",BZIP2,sdfn,ziptmp); + } else +- snprintf(MAXS(cmd),"%s -dc %s > %s",GZIP,sdfn,ziptmp); ++ snprintf(cmd,sizeof(cmd)-1,"%s -dc %s > %s",GZIP,sdfn,ziptmp); + + /* execute shell-command and close spool header file on error */ + if (vsystem(cmd)) { +- snprintf(MAXS(tmp),"cannot recompress spool file #%s",argv[fn]); ++ snprintf(tmp,sizeof(tmp)-1,"cannot recompress spool file #%s",argv[fn]); + message(prg,'E',tmp); + fclose(inf); + break; +@@ -1169,9 +1169,9 @@ const char + /* is there already a comment line? */ + if (str_beq(line,"COMMENT")) { + if (*redirect) +- snprintf(MAXS(line),"%s+AA0ACg-%s",comment,redirect); ++ snprintf(line,sizeof(line)-1,"%s+AA0ACg-%s",comment,redirect); + else { +- snprintf(MAXS(tmp), ++ snprintf(tmp,sizeof(tmp)-1, + "%s+AA0ACg-forward+ACA-from+ACA-%s",line,comment); + strcpy(line,tmp); + } +@@ -1200,9 +1200,9 @@ const char + /* send comment if not already done */ + if (*comment) { + iso2utf(tmp,"forward from "); +- snprintf(MAXS(line),"COMMENT %s%s",tmp,comment); ++ snprintf(line,sizeof(line)-1,"COMMENT %s%s",tmp,comment); + if (*redirect) { +- snprintf(MAXS(tmp),"\r\n%s",redirect); ++ snprintf(tmp,sizeof(tmp)-1,"\r\n%s",redirect); + iso2utf(comment,tmp); + strcat(line,comment); + } +@@ -1215,12 +1215,12 @@ const char + /* check the file size */ + if (stat(ziptmp,&finfo)==0) { + size=finfo.st_size; +- snprintf(MAXS(sizes),"%lld %lld",size,orgsize); +- snprintf(MAXS(line),"SIZE %s",sizes); ++ snprintf(sizes,sizeof(sizes)-1,"%lld %lld",size,orgsize); ++ snprintf(line,sizeof(line)-1,"SIZE %s",sizes); + sendcommand(sockfd,line,NULL); + } else { + if (stat(sdfn,&finfo)<0 || size!=finfo.st_size) { +- snprintf(MAXS(tmp), ++ snprintf(tmp,sizeof(tmp)-1, + "spool file #%s has wrong size count - ignored",argv[fn]); + errno=0; + message(prg,'E',tmp); +@@ -1302,7 +1302,7 @@ const char + fflush(stdout); + } + if (verbose) { +- snprintf(MAXS(tmp),"shell-call: %s",cmd); ++ snprintf(tmp,sizeof(tmp)-1,"shell-call: %s",cmd); + message(prg,'I',tmp); + } + +@@ -1331,9 +1331,9 @@ const char + /* compress tar-archive */ + if (!quiet) printf("compressing... \r"); + fflush(stdout); +- snprintf(MAXS(cmd),"%s < %s > %s",zprg,tartmp,ziptmp); ++ snprintf(cmd,sizeof(cmd)-1,"%s < %s > %s",zprg,tartmp,ziptmp); + if (verbose) { +- snprintf(MAXS(tmp),"shell-call: %s",cmd); ++ snprintf(tmp,sizeof(tmp)-1,"shell-call: %s",cmd); + message(prg,'I',tmp); + } + if (vsystem(cmd)) message(prg,'F',"cannot compress archive file"); +@@ -1350,7 +1350,7 @@ const char + /* get the file size */ + if (stat(file,&finfo)<0) message(prg,'F',"cannot access tmp file"); + size=finfo.st_size; +- snprintf(MAXS(sizes),"%lld %lld",size,orgsize); ++ snprintf(sizes,sizeof(sizes)-1,"%lld %lld",size,orgsize); + + /* write to outgoing spool? */ + if (spool) { +@@ -1360,9 +1360,9 @@ const char + + /* create correct to-string */ + if (strchr(argv[argc-1],'*')) +- snprintf(MAXS(to),"%s",argv[argc-1]); ++ snprintf(to,sizeof(to)-1,"%s",argv[argc-1]); + else +- snprintf(MAXS(to),"%s@%s",recipient,host); ++ snprintf(to,sizeof(to)-1,"%s@%s",recipient,host); + + /* search for file in outgoing spool */ + for (hlp=hls; hlp; hlp=hlp->next) { +@@ -1372,7 +1372,7 @@ const char + if (simplematch(oflp->fname,utf_name,0)) { + + /* matching recipient? */ +- snprintf(MAXS(rto),"%s@%s",oflp->to,hlp->host); ++ snprintf(rto,sizeof(rto)-1,"%s@%s",oflp->to,hlp->host); + if (simplematch(rto,to,0)) { + unlink(oflp->oshfn); + oflp->oshfn[strlen(oflp->oshfn)-1]='d'; +@@ -1406,7 +1406,7 @@ const char + + } else { /* send header lines */ + +- snprintf(MAXS(tmp),"FILE %s",utf_name); ++ snprintf(tmp,sizeof(tmp)-1,"FILE %s",utf_name); + /* deactivate exit on 4xx error to test for timeout */ + client=0; + sendcommand(sockfd,tmp,reply); +@@ -1415,7 +1415,7 @@ const char + /* saft server still online? (check timeout) */ + if (str_beq(reply,"429 ")) { + sockfd=saft_connect("file",recipient,user,host,redirect); +- snprintf(MAXS(tmp),"FILE %s",utf_name); ++ snprintf(tmp,sizeof(tmp)-1,"FILE %s",utf_name); + sendcommand(sockfd,tmp,reply); + } + +@@ -1424,14 +1424,14 @@ const char + + if (overwrite) { + if (str_beq(reply,"200 ")) sendcommand(sockfd,"DEL",reply); +- snprintf(MAXS(tmp),"FILE %s",utf_name); ++ snprintf(tmp,sizeof(tmp)-1,"FILE %s",utf_name); + sendcommand(sockfd,tmp,reply); + } + if (*compress) { + if (str_eq(compress,S_GZIP)) +- snprintf(MAXS(tmp),"TYPE BINARY COMPRESSED"); ++ snprintf(tmp,sizeof(tmp)-1,"TYPE BINARY COMPRESSED"); + else +- snprintf(MAXS(tmp),"TYPE BINARY COMPRESSED=%s",compress); ++ snprintf(tmp,sizeof(tmp)-1,"TYPE BINARY COMPRESSED=%s",compress); + sendcommand(sockfd,tmp,reply); + if (!test && !str_beq(reply,"200 ") && quiet<2) { + errno=0; +@@ -1448,7 +1448,7 @@ const char + if (!test && !str_beq(reply,"200 ") && quiet<2) + message(prg,'W',"remote site does not support binary files"); + } +- snprintf(MAXS(tmp),"SIZE %s",sizes); ++ snprintf(tmp,sizeof(tmp)-1,"SIZE %s",sizes); + sendheader(sockfd,tmp); + sendcommand(sockfd,"ATTR TAR",reply); + if (!test && !str_beq(reply,"200 ") && quiet<2) { +@@ -1463,7 +1463,7 @@ const char + if (*comment) strcat(line,comment); + if (*redirect) { + if (*line) { +- snprintf(MAXS(tmp),"%s\r\n%s",line,redirect); ++ snprintf(tmp,sizeof(tmp)-1,"%s\r\n%s",line,redirect); + strcpy(line,tmp); + } else + strcpy(line,redirect); +@@ -1472,7 +1472,7 @@ const char + if (spool) + fprintf(oshf,"COMMENT\t%s\n",tmp); + else { +- snprintf(MAXS(line),"COMMENT %s",tmp); ++ snprintf(line,sizeof(line)-1,"COMMENT %s",tmp); + sendcommand(sockfd,line,NULL); + } + } +@@ -1515,7 +1515,7 @@ const char + + /* main loop over the file names */ + for (fn=optind; fnnext) { +@@ -1561,7 +1561,7 @@ const char + if (simplematch(oflp->fname,utf_name,0)) { + + /* matching recipient? */ +- snprintf(MAXS(rto),"%s@%s",oflp->to,hlp->host); ++ snprintf(rto,sizeof(rto)-1,"%s@%s",oflp->to,hlp->host); + if (simplematch(rto,to,0)) { + unlink(oflp->oshfn); + oflp->oshfn[strlen(oflp->oshfn)-1]='d'; +@@ -1569,7 +1569,7 @@ const char + if (del) { + del=2; + utf2iso(0,NULL,file,NULL,oflp->fname); +- snprintf(MAXS(tmp), ++ snprintf(tmp,sizeof(tmp)-1, + "deleted from outgoing spool: '%s' for %s ", + file,rto); + if (quiet<2) message(prg,'I',tmp); +@@ -1595,7 +1595,7 @@ const char + } else /* send header lines */ { + + /* send file name */ +- snprintf(MAXS(tmp),"FILE %s",utf_name); ++ snprintf(tmp,sizeof(tmp)-1,"FILE %s",utf_name); + sendcommand(sockfd,tmp,reply); + if (!test && !str_beq(reply,"200 ") && quiet<2) + message(prg,'W',"remote site does not support file names"); +@@ -1606,7 +1606,7 @@ const char + if (sendheader(sockfd,"DEL")) { + if (quiet<2) message(prg,'W',"remote site cannot delete files"); + } else { +- snprintf(MAXS(tmp),"'%s' deleted",iso_name); ++ snprintf(tmp,sizeof(tmp)-1,"'%s' deleted",iso_name); + if (quiet<2) message(prg,'I',tmp); + } + continue; +@@ -1616,7 +1616,7 @@ const char + + /* is the file readable? */ + if (stat(file,&finfo)<0) { +- snprintf(MAXS(tmp),"cannot access '%s'",file); ++ snprintf(tmp,sizeof(tmp)-1,"cannot access '%s'",file); + message(prg,'E',tmp); + if (spool) { + fclose(oshf); +@@ -1628,7 +1628,7 @@ const char + /* is it a regular file? */ + if (!S_ISREG(finfo.st_mode)) { + errno=0; +- snprintf(MAXS(tmp),"%s is not a regular file, skipping",file); ++ snprintf(tmp,sizeof(tmp)-1,"%s is not a regular file, skipping",file); + message(prg,'E',tmp); + if (spool) { + fclose(oshf); +@@ -1659,7 +1659,7 @@ const char + inf=rfopen(file,"r"); + outf=rfopen(texttmp,"w"); + if (!inf) { +- snprintf(MAXS(tmp),"cannot open '%s'",file); ++ snprintf(tmp,sizeof(tmp)-1,"cannot open '%s'",file); + message(prg,'E',tmp); + if (spool) { + fclose(oshf); +@@ -1703,7 +1703,7 @@ const char + for (n=0;do_compress && *cft[n];n++) { + + /* is this file a not compressible one? */ +- snprintf(MAXS(tmp),"*%s*",cft[n]); ++ snprintf(tmp,sizeof(tmp)-1,"*%s*",cft[n]); + if (simplematch(ftype,tmp,1)) do_compress=0; + + } +@@ -1715,13 +1715,13 @@ const char + /* compress tmp-file */ + if (!quiet) printf("compressing... \r"); + fflush(stdout); +- snprintf(MAXS(cmd),"%s < '%s' > %s",zprg,file,ziptmp); ++ snprintf(cmd,sizeof(cmd)-1,"%s < '%s' > %s",zprg,file,ziptmp); + if (verbose) { +- snprintf(MAXS(tmp),"shell-call: %s",strchr(cmd,';')+1); ++ snprintf(tmp,sizeof(tmp)-1,"shell-call: %s",strchr(cmd,';')+1); + message(prg,'I',tmp); + } + if (vsystem(cmd)) { +- snprintf(MAXS(tmp),"cannot compress %s",file); ++ snprintf(tmp,sizeof(tmp)-1,"cannot compress %s",file); + message(prg,'E',tmp); + if (spool) { + fclose(oshf); +@@ -1743,7 +1743,7 @@ const char + /* get the file size */ + if (stat(file,&finfo)<0) message(prg,'F',"cannot access tmp file"); + size=finfo.st_size; +- snprintf(MAXS(sizes),"%lld %lld",size,orgsize); ++ snprintf(sizes,sizeof(sizes)-1,"%lld %lld",size,orgsize); + /* + printf("DEBUG: size=%lld orgsize=%lld sizes=%s\n",size,orgsize,sizes); + exit(0); +@@ -1781,22 +1781,22 @@ const char + + if (do_compress) { + if (str_eq(compress,S_GZIP)) +- snprintf(MAXS(line),"TYPE %s COMPRESSED",type); ++ snprintf(line,sizeof(line)-1,"TYPE %s COMPRESSED",type); + else +- snprintf(MAXS(line),"TYPE %s COMPRESSED=%s",type,compress); ++ snprintf(line,sizeof(line)-1,"TYPE %s COMPRESSED=%s",type,compress); + } else if (pgpcrypt) +- snprintf(MAXS(line),"TYPE %s CRYPTED",type); ++ snprintf(line,sizeof(line)-1,"TYPE %s CRYPTED",type); + else +- snprintf(MAXS(line),"TYPE %s",type); ++ snprintf(line,sizeof(line)-1,"TYPE %s",type); + sendcommand(sockfd,line,reply); + if (!test && !str_beq(reply,"200 ") && quiet<2) { + errno=0; +- snprintf(MAXS(tmp),"remote site does not support file of %s",line); ++ snprintf(tmp,sizeof(tmp)-1,"remote site does not support file of %s",line); + message(prg,'F',tmp); + } +- snprintf(MAXS(tmp),"SIZE %s",sizes); ++ snprintf(tmp,sizeof(tmp)-1,"SIZE %s",sizes); + sendheader(sockfd,tmp); +- snprintf(MAXS(tmp),"DATE %s",date); ++ snprintf(tmp,sizeof(tmp)-1,"DATE %s",date); + if (sendheader(sockfd,tmp) && quiet<2) + message(prg,'W',"remote site does not support dates"); + if (exe) +@@ -1811,7 +1811,7 @@ const char + if (*comment) strcat(line,comment); + if (*redirect) { + if (*line) { +- snprintf(MAXS(tmp),"%s\r\n%s",line,redirect); ++ snprintf(tmp,sizeof(tmp)-1,"%s\r\n%s",line,redirect); + strcpy(line,tmp); + } else + strcpy(line,redirect); +@@ -1820,7 +1820,7 @@ const char + if (spool) + fprintf(oshf,"COMMENT\t%s\n",tmp); + else { +- snprintf(MAXS(line),"COMMENT %s",tmp); ++ snprintf(line,sizeof(line)-1,"COMMENT %s",tmp); + sendcommand(sockfd,line,NULL); + } + } +@@ -1880,15 +1880,15 @@ const char + if (tsize && info && tfn>1 && quiet<2) { + thruput=tsize*1000/tttime; + if (tsize/1024>9999) +- snprintf(MAXS(tmp),"%d files sent with %.1f MB",tfn,tsize/1024/1024); ++ snprintf(tmp,sizeof(tmp)-1,"%d files sent with %.1f MB",tfn,tsize/1024/1024); + else if (tsize>9999) +- snprintf(MAXS(tmp),"%d files sent with %.1f kB",tfn,tsize/1024); ++ snprintf(tmp,sizeof(tmp)-1,"%d files sent with %.1f kB",tfn,tsize/1024); + else +- snprintf(MAXS(tmp),"%d files sent with %d byte",tfn,(int)tsize); ++ snprintf(tmp,sizeof(tmp)-1,"%d files sent with %d byte",tfn,(int)tsize); + if (thruput>9999) +- snprintf(MAXS(line),"%s at %.1f kB/s",tmp,thruput/1024); ++ snprintf(line,sizeof(line)-1,"%s at %.1f kB/s",tmp,thruput/1024); + else +- snprintf(MAXS(line),"%s at %d byte/s",tmp,(int)thruput); ++ snprintf(line,sizeof(line)-1,"%s at %d byte/s",tmp,(int)thruput); + message("",'I',line); + } + +@@ -1952,7 +1952,7 @@ void cleanup() { + if (str_beq(reply,"220 ") && strstr(reply,"SAFT")) { + + /* send LOG command */ +- snprintf(MAXS(line),"LOG %s %s",pw_name,outlogtmp); ++ snprintf(line,sizeof(line)-1,"LOG %s %s",pw_name,outlogtmp); + sock_putline(sockfd,line); + sock_getline(sockfd,reply); + str_trim(reply); +@@ -1981,7 +1981,7 @@ void cleanup() { + if (str_beq(reply,"220 ") && strstr(reply,"SAFT")) { + + /* send LOG command */ +- snprintf(MAXS(line),"LOG %s %s",pw_name,outlogtmp); ++ snprintf(line,sizeof(line)-1,"LOG %s %s",pw_name,outlogtmp); + sock_putline(sockfd,line); + sock_getline(sockfd,reply); + str_trim(reply); +@@ -2033,7 +2033,7 @@ void pgp_encrypt(int pgpcrypt, char *pgprid, char *file) { + + /* look for matching pgp-IDs */ + if (strlen(pgprid)>1) { +- snprintf(MAXS(cmd),"%s -kvf %s > %s 2>/dev/null",pgp_bin,pgprid,pgptmp); ++ snprintf(cmd,sizeof(cmd)-1,"%s -kvf %s > %s 2>/dev/null",pgp_bin,pgprid,pgptmp); + vsystem(cmd); + if (stat(pgptmp,&finfo)<0 || finfo.st_size==0 || !(inf=rfopen(pgptmp,"r"))) { + errno=0; +@@ -2044,7 +2044,7 @@ void pgp_encrypt(int pgpcrypt, char *pgprid, char *file) { + if ((cp=strchr(line,'.'))) *cp=0; + if (!str_eq(line,"1 matching key found")) { + if (!quiet) { +- snprintf(MAXS(line),"ambigous pgp-ID '%s'",pgprid); ++ snprintf(line,sizeof(line)-1,"ambigous pgp-ID '%s'",pgprid); + message(prg,'W',line); + inf=rfopen(pgptmp,"r"); + while (fgetl(line,inf)) printf("%s",line); +@@ -2057,7 +2057,7 @@ void pgp_encrypt(int pgpcrypt, char *pgprid, char *file) { + + /* pgp needs user input? */ + if (pgpcrypt=='c' || !*pgprid) { +- snprintf(MAXS(cmd),"%s +armor=off -f%c < %s > %s", ++ snprintf(cmd,sizeof(cmd)-1,"%s +armor=off -f%c < %s > %s", + pgp_bin,pgpcrypt,shell_quote(file),pgptmp); + if (vsystem(cmd) || stat(pgptmp,&finfo)<0 || finfo.st_size==0) { + errno=0; +@@ -2067,7 +2067,7 @@ void pgp_encrypt(int pgpcrypt, char *pgprid, char *file) { + + /* pgp needs no user input */ + } else { +- snprintf(MAXS(cmd),"%s +armor=off -fe %s < %s > %s 2>/dev/null", ++ snprintf(cmd,sizeof(cmd)-1,"%s +armor=off -fe %s < %s > %s 2>/dev/null", + pgp_bin,pgprid,shell_quote(file),pgptmp); + if (vsystem(cmd) || stat(pgptmp,&finfo)<0 || finfo.st_size==0) { + errno=0; +@@ -2102,10 +2102,10 @@ void pgp_sign(const char *pgpsign, const char *infile, int sockfd) { + + if (!quiet && !pgppass) message(prg,'I',"call to pgp..."); + +- snprintf(MAXS(cmd),"%s %s -fsba %s < %s", ++ snprintf(cmd,sizeof(cmd)-1,"%s %s -fsba %s < %s", + pgp_bin,pgpvm,pgpsign,shell_quote(infile)); + if (verbose) { +- snprintf(MAXS(tmp),"shell-call: %s",cmd); ++ snprintf(tmp,sizeof(tmp)-1,"shell-call: %s",cmd); + message(prg,'I',tmp); + } + if (!(pipe=popen(cmd,"r"))) message(prg,'F',"call to pgp (signature) failed"); +@@ -2124,7 +2124,7 @@ void pgp_sign(const char *pgpsign, const char *infile, int sockfd) { + if (check!=3) message(prg,'F',"call to pgp (signature) failed"); + + iso2utf(tmp,sign); +- snprintf(MAXS(sign),"SIGN %s",tmp); ++ snprintf(sign,sizeof(sign)-1,"SIGN %s",tmp); + if (sockfd) sendcommand(sockfd,sign,NULL); + } + +@@ -2197,13 +2197,13 @@ void start_spooldaemon(char *localhost) { + #else + sockfd=open_connection(localhost,SERVICE); + #endif +- if (sockfd==-1) snprintf(MAXS(tmp),"cannot create a network socket " ++ if (sockfd==-1) snprintf(tmp,sizeof(tmp)-1,"cannot create a network socket " + "- cannot start local spool daemon"); +- if (sockfd==-2) snprintf(MAXS(tmp),"cannot open connection to %s " ++ if (sockfd==-2) snprintf(tmp,sizeof(tmp)-1,"cannot open connection to %s " + "- cannot start local spool daemon",localhost); +- if (sockfd==-3) snprintf(MAXS(tmp),"%s is unknown (name server down?) " ++ if (sockfd==-3) snprintf(tmp,sizeof(tmp)-1,"%s is unknown (name server down?) " + "- cannot start local spool daemon",localhost); +- if (sockfd==-4) snprintf(MAXS(tmp),"out of memory " ++ if (sockfd==-4) snprintf(tmp,sizeof(tmp)-1,"out of memory " + "- cannot start local spool daemon"); + if (sockfd<0) { + errno=0; +@@ -2215,10 +2215,10 @@ void start_spooldaemon(char *localhost) { + if (!str_beq(line,"220 ") || !strstr(line,"SAFT")) { + errno=0; + #ifndef ENABLE_MULTIPROTOCOL +- snprintf(MAXS(tmp),"No SAFT server on port %d at %s " ++ snprintf(tmp,sizeof(tmp)-1,"No SAFT server on port %d at %s " + "- cannot start local spool daemon",SAFT,localhost); + #else +- snprintf(MAXS(tmp),"No SAFT server on port %s at %s " ++ snprintf(tmp,sizeof(tmp)-1,"No SAFT server on port %s at %s " + "- cannot start local spool daemon",SERVICE,localhost); + #endif + message(prg,'F',tmp); +@@ -2241,13 +2241,13 @@ void start_spooldaemon(char *localhost) { + #else + sockfd=open_connection(host,SERVICE); + #endif +- if (sockfd==-1) snprintf(MAXS(tmp),"cannot create a network socket " ++ if (sockfd==-1) snprintf(tmp,sizeof(tmp)-1,"cannot create a network socket " + "- cannot start local spool daemon"); +- if (sockfd==-2) snprintf(MAXS(tmp),"cannot open connection to %s " ++ if (sockfd==-2) snprintf(tmp,sizeof(tmp)-1,"cannot open connection to %s " + "- cannot start local spool daemon",host); +- if (sockfd==-3) snprintf(MAXS(tmp),"%s is unknown (name server down?) " ++ if (sockfd==-3) snprintf(tmp,sizeof(tmp)-1,"%s is unknown (name server down?) " + "- cannot start local spool daemon",host); +- if (sockfd==-4) snprintf(MAXS(tmp),"out of memory " ++ if (sockfd==-4) snprintf(tmp,sizeof(tmp)-1,"out of memory " + "- cannot start local spool daemon"); + if (sockfd<0) { + errno=0; +@@ -2259,10 +2259,10 @@ void start_spooldaemon(char *localhost) { + if (!str_beq(line,"220 ") || !strstr(line,"SAFT")) { + errno=0; + #ifndef ENABLE_MULTIPROTOCOL +- snprintf(MAXS(tmp),"No SAFT server on port %d at %s " ++ snprintf(tmp,sizeof(tmp)-1,"No SAFT server on port %d at %s " + "- cannot start local spool daemon",SAFT,host); + #else +- snprintf(MAXS(tmp),"No SAFT server on port %s at %s " ++ snprintf(tmp,sizeof(tmp)-1,"No SAFT server on port %s at %s " + "- cannot start local spool daemon",SERVICE,host); + #endif + message(prg,'F',tmp); +@@ -2392,7 +2392,7 @@ void get_header(const char *cmd, char *arg){ + if (!str_eq(cmd,line)) { + errno=0; + line[MAXLEN-80]=0; +- snprintf(MAXS(tmp), ++ snprintf(tmp,sizeof(tmp)-1, + "illegal SAFT command \"%s\", \"%s\" was expected",line,cmd); + message(prg,'F',tmp); + } +@@ -2473,7 +2473,7 @@ char guess_ftype(const char *file, char *type) { + /* next, try with file command */ + + /* read output from file command */ +- snprintf(MAXS(cmd),"file %s",shell_quote(file)); ++ snprintf(cmd,sizeof(cmd)-1,"file %s",shell_quote(file)); + if ((pipe=vpopen(cmd,"r")) && fgetl(tmp,pipe)) { + pclose(pipe); + +@@ -2485,7 +2485,7 @@ char guess_ftype(const char *file, char *type) { + if ((cp=strchr(type,'\n'))) *cp=0; + + if (verbose) { +- snprintf(MAXS(tmp),"%s is of type %s",file,type); ++ snprintf(tmp,sizeof(tmp)-1,"%s is of type %s",file,type); + message(prg,'I',tmp); + } + +@@ -2535,14 +2535,14 @@ int linkspeed(const char *host, int lanspeed, char **compress) { + if (lanspeed<1) return(1); + + /* create speeds dir if necessary */ +- snprintf(MAXS(speeddir),"%s/speeds",userspool); ++ snprintf(speeddir,sizeof(speeddir)-1,"%s/speeds",userspool); + if (stat(speeddir,&finfo)<0 || !S_ISDIR(finfo.st_mode)) { + unlink(speeddir); + if (mkdir(speeddir,S_IRUSR|S_IWUSR|S_IXUSR)<0) return(1); + chmod(speeddir,S_IRUSR|S_IWUSR|S_IXUSR); + } + +- snprintf(MAXS(hostfile),"%s/%s",speeddir,host); ++ snprintf(hostfile,sizeof(hostfile)-1,"%s/%s",speeddir,host); + + /* if host file is missing return slow link */ + if (!(inf=rfopen(hostfile,"r"))) return(1); +@@ -2552,11 +2552,11 @@ int linkspeed(const char *host, int lanspeed, char **compress) { + if (speed1) return; + + if (stat(sdf,&finfo)<0) { +- snprintf(MAXS(tmp),"cannot access spool file %s",sdf); ++ snprintf(tmp,sizeof(tmp)-1,"cannot access spool file %s",sdf); + message(prg,'E',tmp); + return; + } +@@ -2666,9 +2666,9 @@ void spooled_info(const char *file, const char *sdf, int compressed) { + size=(finfo.st_size+512)/1024; + + if (compressed) +- snprintf(MAXS(tmp),"'%s' spooled (%d KB [compressed])",file,size); ++ snprintf(tmp,sizeof(tmp)-1,"'%s' spooled (%d KB [compressed])",file,size); + else +- snprintf(MAXS(tmp),"'%s' spooled (%d KB)",file,size); ++ snprintf(tmp,sizeof(tmp)-1,"'%s' spooled (%d KB)",file,size); + message(prg,'I',tmp); + } + +diff --git a/src/sendfiled.c b/src/sendfiled.c +index eb25612..39715e5 100644 +--- a/src/sendfiled.c ++++ b/src/sendfiled.c +@@ -655,7 +655,7 @@ int main(int argc, char *argv[]) { + } + if (str_eq(line,"path")) { + if (*argp == '/') { +- snprintf(MAXS(path),"PATH=%s",argp); ++ snprintf(path,sizeof(path)-1,"PATH=%s",argp); + putenv(path); + } + continue; +@@ -665,7 +665,7 @@ int main(int argc, char *argv[]) { + continue; + } + if (str_eq(line,"forcepgp")) { +- snprintf(MAXS(sys_forcepgp),"%s",argp); ++ snprintf(sys_forcepgp,sizeof(sys_forcepgp)-1,"%s",argp); + continue; + } + if (str_eq(line,"spooling")) { +@@ -896,7 +896,7 @@ int main(int argc, char *argv[]) { + strcpy(forcepgp,sys_forcepgp); + + /* parse the user config-file */ +- snprintf(MAXS(tmp),"%s/config",userconfig); ++ snprintf(tmp,sizeof(tmp)-1,"%s/config",userconfig); + setreugid(); + if ((inf=rfopen(tmp,"r"))) { + while ((fgetl(line,inf))) { +@@ -935,7 +935,7 @@ int main(int argc, char *argv[]) { + + /* pgp force option */ + if (str_eq(line,"forcepgp")) { +- snprintf(MAXS(forcepgp),"%s",argp); ++ snprintf(forcepgp,sizeof(forcepgp)-1,"%s",argp); + continue; + } + +@@ -946,7 +946,7 @@ int main(int argc, char *argv[]) { + if (str_beq(argp,"mail")) strcpy(notification,"m"); + if (str_eq(argp,"both")) strcpy(notification,"b"); + if (str_eq(argp,"program")) +- snprintf(MAXS(notification),"%s/notify ",userconfig); ++ snprintf(notification,sizeof(notification)-1,"%s/notify ",userconfig); + else { + + /* mail address specified to send notifications to? */ +@@ -1038,18 +1038,18 @@ int main(int argc, char *argv[]) { + peer=peername(0); + if (str_eq(peer,"localhost")) peer=localhost; + if (strlen(arg)+strlen(peer)+strlen(real)+4id; +- snprintf(MAXS(sdfile),"%d.d",id); ++ snprintf(sdfile,sizeof(sdfile)-1,"%d.d",id); + sdfd=open(sdfile,O_WRONLY|O_APPEND|O_LARGEFILE,S_IRUSR|S_IWUSR); + if (sdfd<0) notify_reply(¬ify,notification,sender,recipient, + mailto,bell,412); +@@ -1608,8 +1608,8 @@ int main(int argc, char *argv[]) { + notify_reply(¬ify,notification,sender,recipient,mailto,bell,413); + + /* open spool header and data files */ +- snprintf(MAXS(shfile),"%d.h",id); +- snprintf(MAXS(sdfile),"%d.d",id); ++ snprintf(shfile,sizeof(shfile)-1,"%d.h",id); ++ snprintf(sdfile,sizeof(sdfile)-1,"%d.d",id); + sdfd=open(sdfile,O_WRONLY|O_CREAT|O_LARGEFILE,S_IRUSR|S_IWUSR); + shfd=open(shfile,O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR); + if (shfd<0 || sdfd<0) notify_reply(¬ify,notification,sender, +@@ -1734,7 +1734,7 @@ int main(int argc, char *argv[]) { + if (*rpipe) { + + /* open post-processing pipe */ +- snprintf(MAXS(tmp),"cat %s/%s %s/%s | %s && rm -f %s/%s %s/%s", ++ snprintf(tmp,sizeof(tmp)-1,"cat %s/%s %s/%s | %s && rm -f %s/%s %s/%s", + userspool,shfile, + userspool,sdfile, + rpipe, +@@ -1817,7 +1817,7 @@ int main(int argc, char *argv[]) { + (str_eq(date,flp->date) || !*date) && + flags==flp->flags) { + /* with same sizes? */ +- snprintf(MAXS(tmp),"%lld %lld",flp->csize,flp->osize); ++ snprintf(tmp,sizeof(tmp)-1,"%lld %lld",flp->csize,flp->osize); + if (str_eq(tmp,sizes)) { + + /* number of bytes already transmitted */ +@@ -1931,14 +1931,14 @@ int main(int argc, char *argv[]) { + setreugid(); + + /* write challenge file */ +- snprintf(MAXS(chfile),"tmp_challenge_%d",(int)getpid()); ++ snprintf(chfile,sizeof(chfile)-1,"tmp_challenge_%d",(int)getpid()); + outf=rfopen(chfile,"w"); + if (!outf) reply(410); + fprintf(outf,"%d",challenge); + fclose(outf); + + /* write challenge signature file */ +- snprintf(MAXS(csfile),"tmp_challenge_%d.asc",(int)getpid()); ++ snprintf(csfile,sizeof(csfile)-1,"tmp_challenge_%d.asc",(int)getpid()); + unlink(csfile); + outf=rfopen(csfile,"w"); + if (!outf) { +@@ -1954,7 +1954,7 @@ int main(int argc, char *argv[]) { + * pgp -sbaf +clearsig=on +secring=private.pgp +pubring=private.pgp + */ + +- snprintf(MAXS(tmp),"%s +pubring=config/public.pgp %s %s 2>/dev/null", ++ snprintf(tmp,sizeof(tmp)-1,"%s +pubring=config/public.pgp %s %s 2>/dev/null", + pgp_bin,csfile,chfile); + pp=popen(tmp,"r"); + if (!pp) { +@@ -2009,7 +2009,7 @@ int main(int argc, char *argv[]) { + } + + /* change to user config directory */ +- snprintf(MAXS(tmp),"%s/config",userspool); ++ snprintf(tmp,sizeof(tmp)-1,"%s/config",userspool); + if (chdir(tmp)<0) reply(410); + + /* change effective uid and gid to recipient */ +@@ -2138,7 +2138,7 @@ int main(int argc, char *argv[]) { + setreugid(); + + /* open header file */ +- snprintf(MAXS(shfile),"%d.h",id); ++ snprintf(shfile,sizeof(shfile)-1,"%d.h",id); + if (!(inf=rfopen(shfile,"r"))) reply(550); + + /* read and transfer header file */ +@@ -2163,7 +2163,7 @@ int main(int argc, char *argv[]) { + setreugid(); + + /* open spool data file */ +- snprintf(MAXS(sdfile),"%d.d",id); ++ snprintf(sdfile,sizeof(sdfile)-1,"%d.d",id); + if (stat(sdfile,&finfo)<0 || (infd=open(sdfile,O_RDONLY|O_LARGEFILE))<0) reply(550); + if (transmitted>finfo.st_size) { + reply(507); +@@ -2434,7 +2434,7 @@ void writeheader(int fd, const char *attribute, const char *value) { + int hsize; /* header string size */ + char header[2*MAXLEN]; /* header string */ + +- snprintf(MAXS(header),"%s\t%s\n",attribute,value); ++ snprintf(header,sizeof(header)-1,"%s\t%s\n",attribute,value); + hsize=strlen(header); + if (write(fd,header,hsize)0) { + +-#if defined(NEXT) || defined(BSD) || defined(ULTRIX) || defined(SOLARIS1) ++#if defined(NEXT) || defined(BSD) || defined(ULTRIX) || defined(SOLARIS1) || defined(__APPLE__) + strncpy(user,uinfo.ut_name,8); + if (str_eq(recipient,user)) { + +@@ -2598,7 +2598,7 @@ int msg2tty(const char *recipient, const char *msgh, char *msg, int mode) { + if (uinfo.ut_type==USER_PROCESS && str_eq(recipient,user)) { + #endif + /* get the tty */ +- snprintf(MAXS(tty),"/dev/%s",uinfo.ut_line); ++ snprintf(tty,sizeof(tty)-1,"/dev/%s",uinfo.ut_line); + + /* is the tty writeable? */ + if (stat(tty,&finfo)==0 && +@@ -2664,7 +2664,7 @@ void mail2user(const char *recipient, const char *sender, const char *msg) { + while ((cp=strchr(sender,'\''))) *cp=' '; + + /* open pipe to sendmail */ +- snprintf(MAXS(cmd),SENDMAIL" %s",recipient); ++ snprintf(cmd,sizeof(cmd)-1,SENDMAIL" %s",recipient); + pout=popen(cmd,"w"); + + /* fill out mail message */ +@@ -2730,7 +2730,7 @@ int restricted(const char *sender, const char *recipient, char type) { + + setreugid(); + +- snprintf(MAXS(killfile),"%s/config/restrictions",userspool); ++ snprintf(killfile,sizeof(killfile)-1,"%s/config/restrictions",userspool); + *kfm=*kfu=0; + + /* open and check killfile */ +@@ -2786,9 +2786,9 @@ off_t free_space() { + #endif + + if (*userspool) +- snprintf(MAXS(spool),"%s/.",userspool); ++ snprintf(spool,sizeof(spool)-1,"%s/.",userspool); + else +- snprintf(MAXS(spool),"%s/.",SPOOL); ++ snprintf(spool,sizeof(spool)-1,"%s/.",SPOOL); + + #if defined(IRIX) || defined(IRIX64) + if (statfs(spool,&fsinfo,sizeof(struct statfs),0)==0) +@@ -2838,7 +2838,7 @@ int get_sizes(char *string, off_t *size, off_t *osize) { + + /* get maximum file size for this process */ + #ifdef RLIMIT_FSIZE +- if (getrlimit(RLIMIT_FSIZE,&rl)==0) snprintf(MAXS(max),"%llu",rl.rlim_cur); ++ if (getrlimit(RLIMIT_FSIZE,&rl)==0) snprintf(max,sizeof(max)-1,"%llu",rl.rlim_cur); + #endif + + /* get compressed and original file size string */ +@@ -2883,10 +2883,10 @@ int send_msg(const char *msg, const char *to, const char *recipient) { + cp=strchr(to,'@'); + if (cp) { + *cp=0; +- snprintf(MAXS(user),"%s",to); +- snprintf(MAXS(host),"%s",cp+1); ++ snprintf(user,sizeof(user)-1,"%s",to); ++ snprintf(host,sizeof(host)-1,"%s",cp+1); + } else { +- snprintf(MAXS(user),"%s",to); ++ snprintf(user,sizeof(user)-1,"%s",to); + strcpy(host,localhost); + } + +@@ -2901,24 +2901,24 @@ int send_msg(const char *msg, const char *to, const char *recipient) { + sock_getline(sockfd,line); + if (!str_beq(line,"220 ") || !strstr(line,"SAFT")) return(-1); + /* +- snprintf(MAXS(tmp),"connected to %s",host); ++ snprintf(tmp,sizeof(tmp)-1,"connected to %s",host); + dbgout(tmp); + */ +- snprintf(MAXS(line),"FROM %s autogenerated+ACA-SAFT+ACA-message",recipient); +- snprintf(MAXS(line),"FROM %s",recipient); ++ snprintf(line,sizeof(line)-1,"FROM %s autogenerated+ACA-SAFT+ACA-message",recipient); ++ snprintf(line,sizeof(line)-1,"FROM %s",recipient); + sock_putline(sockfd,line); + if (!str_beq(getreply(sockfd),"200 ")) { + close(sockfd); + return(-1); + } +- snprintf(MAXS(line),"TO %s",user); ++ snprintf(line,sizeof(line)-1,"TO %s",user); + sock_putline(sockfd,line); + if (!str_beq(getreply(sockfd),"200 ")) { + close(sockfd); + return(-1); + } + iso2utf(tmp,(char*)msg); +- snprintf(MAXS(line),"MSG %s",tmp); ++ snprintf(line,sizeof(line)-1,"MSG %s",tmp); + sock_putline(sockfd,line); + if (!str_beq(getreply(sockfd),"200 ")) { + close(sockfd); +@@ -2978,7 +2978,7 @@ int sfsd(int queue, int parallel, int bounce, int retry, float mtp) { + /* test outgoing spool */ + if (chdir(OUTGOING)<0) { + if (queue==1) message(prg,'F',OUTGOING); +- snprintf(MAXS(tmp),OUTGOING" : %s",strerror(errno)); ++ snprintf(tmp,sizeof(tmp)-1,OUTGOING" : %s",strerror(errno)); + dbgout(tmp); + exit(1); + } +@@ -3022,16 +3022,16 @@ int sfsd(int queue, int parallel, int bounce, int retry, float mtp) { + /* relock */ + unlink(lockfn); + if ((lockf=open(lockfn,O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR))<0) { +- snprintf(MAXS(tmp),"cannot open %s : %s",lockfn,strerror(errno)); ++ snprintf(tmp,sizeof(tmp)-1,"cannot open %s : %s",lockfn,strerror(errno)); + dbgout(tmp); + exit(1); + } + if (wlock_file(lockf)<0) { +- snprintf(MAXS(tmp),"cannot lock %s : %s",lockfn,strerror(errno)); ++ snprintf(tmp,sizeof(tmp)-1,"cannot lock %s : %s",lockfn,strerror(errno)); + dbgout(tmp); + exit(1); + } +- snprintf(MAXS(tmp),"%d\n",(int)getpid()); ++ snprintf(tmp,sizeof(tmp)-1,"%d\n",(int)getpid()); + write(lockf,tmp,strlen(tmp)); + + /* disconnect from client */ +@@ -3079,7 +3079,7 @@ int sfsd(int queue, int parallel, int bounce, int retry, float mtp) { + continue; + } + +- snprintf(MAXS(tmp),"connected to %s",hlp->host); ++ snprintf(tmp,sizeof(tmp)-1,"connected to %s",hlp->host); + if (queue==1) message(prg,'I',tmp); + dbgout(tmp); + +@@ -3126,7 +3126,7 @@ int sfsd(int queue, int parallel, int bounce, int retry, float mtp) { + + /* same host? */ + if (str_eq(hlp->host,ahost)) { +- snprintf(MAXS(line),"TO %s",arecipient); ++ snprintf(line,sizeof(line)-1,"TO %s",arecipient); + sock_putline(sockfd,line); + rs=getreply(sockfd); + if (!str_beq(rs,"200")) { +@@ -3150,7 +3150,7 @@ int sfsd(int queue, int parallel, int bounce, int retry, float mtp) { + break; + } + +- snprintf(MAXS(tmp),"connected to %s (forward redirection)", ++ snprintf(tmp,sizeof(tmp)-1,"connected to %s (forward redirection)", + hlp->host); + if (queue==1) message(prg,'I',tmp); + dbgout(tmp); +@@ -3252,7 +3252,7 @@ int sfsd(int queue, int parallel, int bounce, int retry, float mtp) { + while ((ssec=t0-time(0)+retry*60)>0) { + sigchld(); + signal(SIGCHLD,sigchld); +- snprintf(MAXS(tmp),"sleep %d s",ssec); ++ snprintf(tmp,sizeof(tmp)-1,"sleep %d s",ssec); + dbgout(tmp); + sleep(ssec); + } +@@ -3291,17 +3291,17 @@ int send_spooldata(int sockfd, char *oshfn, char *from, char *to, + /* status report */ + if (queue) { + utf2iso(0,isoname,NULL,NULL,fname); +- snprintf(MAXS(tmp),"sending %s to %s",isoname,to); ++ snprintf(tmp,sizeof(tmp)-1,"sending %s to %s",isoname,to); + message(prg,'I',tmp); + } + +- snprintf(MAXS(tmp),"sending %s to %s@%s",fname,to,host); ++ snprintf(tmp,sizeof(tmp)-1,"sending %s to %s@%s",fname,to,host); + dbgout(tmp); + + strcpy(osdfn,oshfn); + osdfn[strlen(osdfn)-1]='d'; + if (stat(osdfn,&finfo)<0) { +- snprintf(MAXS(tmp),"cannot access %s",osdfn); ++ snprintf(tmp,sizeof(tmp)-1,"cannot access %s",osdfn); + dbgout(tmp); + return(-1); + } +@@ -3318,10 +3318,10 @@ int send_spooldata(int sockfd, char *oshfn, char *from, char *to, + + /* write status log */ + mkdir(SPOOL"/LOG",S_IRUSR|S_IWUSR|S_IXUSR); +- snprintf(MAXS(tmp),SPOOL"/LOG/%s:%s",from,host); ++ snprintf(tmp,sizeof(tmp)-1,SPOOL"/LOG/%s:%s",from,host); + if ((mailf=rfopen(tmp,"a"))) { + chmod(tmp,S_IRUSR|S_IWUSR); +- snprintf(MAXS(tmp),"'%s' to %s",fname,to); ++ snprintf(tmp,sizeof(tmp)-1,"'%s' to %s",fname,to); + utf2iso(1,line,NULL,NULL,tmp); + timetick=time(0); + strftime(tmp,21,DATEFORMAT,localtime(&timetick)); +@@ -3375,14 +3375,14 @@ int saftserver_connect(char *host, char *error) { + for (hopcount=1; hopcount<11; hopcount++) { + + /* tell where to send to */ +- snprintf(MAXS(tmp),"opening connection to %s:%d",host,port); ++ snprintf(tmp,sizeof(tmp)-1,"opening connection to %s:%d",host,port); + dbgout(tmp); + + /* initiate the connection to the server */ + sockfd=open_connection(host,port); + if (sockfd==-3 && port==SAFT) { +- snprintf(MAXS(server),"saft.%s",host); +- snprintf(MAXS(tmp),"opening connection to %s:%d",server,SAFT); ++ snprintf(server,sizeof(server)-1,"saft.%s",host); ++ snprintf(tmp,sizeof(tmp)-1,"opening connection to %s:%d",server,SAFT); + dbgout(tmp); + sockfd=open_connection(server,SAFT); + switch (sockfd) { +@@ -3419,7 +3419,7 @@ int saftserver_connect(char *host, char *error) { + status=check_forward(sockfd,tmp,host,error); + if (status==-1) return(-1); + if (status==1) { +- snprintf(MAXS(tmp),"forward points to %s",host); ++ snprintf(tmp,sizeof(tmp)-1,"forward points to %s",host); + dbgout(tmp); + colon=NULL; + port=487; +@@ -3427,7 +3427,7 @@ int saftserver_connect(char *host, char *error) { + } + + /* connection is successfull */ +- snprintf(MAXS(tmp),"connected to %s:%d",host,port); ++ snprintf(tmp,sizeof(tmp)-1,"connected to %s:%d",host,port); + *error=0; + dbgout(tmp); + return(sockfd); +@@ -3477,14 +3477,14 @@ int saftserver_connect(char *host, char *error) { + for (hopcount=1; hopcount<11; hopcount++) { + + /* tell where to send to */ +- snprintf(MAXS(tmp),"opening connection to %s:%s",host,service); ++ snprintf(tmp,sizeof(tmp)-1,"opening connection to %s:%s",host,service); + dbgout(tmp); + + /* initiate the connection to the server */ + sockfd=open_connection(host,service); + if (sockfd==-3 && (strcasecmp(service, SERVICE) == 0 || strcmp(service, PORT_STRING) == 0)) { +- snprintf(MAXS(server),"saft.%s",host); +- snprintf(MAXS(tmp),"opening connection to %s:%s",server,SERVICE); ++ snprintf(server,sizeof(server)-1,"saft.%s",host); ++ snprintf(tmp,sizeof(tmp)-1,"opening connection to %s:%s",server,SERVICE); + dbgout(tmp); + sockfd=open_connection(server,SERVICE); + switch (sockfd) { +@@ -3523,7 +3523,7 @@ int saftserver_connect(char *host, char *error) { + status=check_forward(sockfd,tmp,host,error); + if (status==-1) return(-1); + if (status==1) { +- snprintf(MAXS(tmp),"forward points to %s",host); ++ snprintf(tmp,sizeof(tmp)-1,"forward points to %s",host); + dbgout(tmp); + colon=NULL; + service = SERVICE; +@@ -3531,7 +3531,7 @@ int saftserver_connect(char *host, char *error) { + } + + /* connection is successfull */ +- snprintf(MAXS(tmp),"connected to %s:%s",host,service); ++ snprintf(tmp,sizeof(tmp)-1,"connected to %s:%s",host,service); + *error=0; + dbgout(tmp); + return(sockfd); +@@ -3576,7 +3576,7 @@ int mail_report(const char *host) { + /* stupid NeXT has a broken readdir(); this is a dirty workaround */ + + /* open LOG dir */ +- snprintf(MAXS(cmd),"ls *:%s 2>/dev/null",host); ++ snprintf(cmd,sizeof(cmd)-1,"ls *:%s 2>/dev/null",host); + if ((dp=popen(cmd,"r")) == NULL) { + exit(0); + if (parallel) continue; +@@ -3597,7 +3597,7 @@ int mail_report(const char *host) { + while ((dire=readdir(dp))) { + + strcpy(mailfn,dire->d_name); +- snprintf(MAXS(tmp),"*:%s",host); ++ snprintf(tmp,sizeof(tmp)-1,"*:%s",host); + if (simplematch(mailfn,tmp,0)<1) continue; + #endif + mailf=rfopen(mailfn,"r"); +@@ -3693,7 +3693,7 @@ void check_outspool(int bounce) { + while ((dire=readdir(dp))) { + + /* ignore non-header files */ +- snprintf(MAXS(oshfn),"%s",dire->d_name); ++ snprintf(oshfn,sizeof(oshfn)-1,"%s",dire->d_name); + if (!str_eq(&oshfn[strlen(oshfn)-2],".h")) continue; + #endif + +@@ -3703,7 +3703,7 @@ void check_outspool(int bounce) { + + /* spool time expired? */ + if (timetick>finfo.st_mtime+bounce*DAYSEC) { +- snprintf(MAXS(tmp),"no connection within %d days",bounce); ++ snprintf(tmp,sizeof(tmp)-1,"no connection within %d days",bounce); + bounce_file(oshfn,tmp); + } + } +@@ -3749,8 +3749,8 @@ int bounce_file(char *file, char *comment) { + cp++; + else + cp=file; +- snprintf(MAXS(oshfn),OUTGOING"/%s",cp); +- snprintf(MAXS(osdfn),OUTGOING"/%s",cp); ++ snprintf(oshfn,sizeof(oshfn)-1,OUTGOING"/%s",cp); ++ snprintf(osdfn,sizeof(osdfn)-1,OUTGOING"/%s",cp); + osdfn[strlen(osdfn)-1]='d'; + + if (stat(oshfn,&finfo)<0) return(-1); +@@ -3758,7 +3758,7 @@ int bounce_file(char *file, char *comment) { + + /* get user name and spool directory */ + if (!(pwe=getpwuid(finfo.st_uid))) return(-1); +- snprintf(MAXS(userspool),SPOOL"/%s",pwe->pw_name); ++ snprintf(userspool,sizeof(userspool)-1,SPOOL"/%s",pwe->pw_name); + + /* create user spool directory if necessary */ + if (mkdir(userspool,S_IRUSR|S_IWUSR|S_IXUSR)==0) +@@ -3788,8 +3788,8 @@ int bounce_file(char *file, char *comment) { + } + + /* set file names */ +- snprintf(MAXS(shfn),"%d.h",id); +- snprintf(MAXS(sdfn),"%d.d",id); ++ snprintf(shfn,sizeof(shfn)-1,"%d.h",id); ++ snprintf(sdfn,sizeof(sdfn)-1,"%d.d",id); + + if (!(outf=rfopen(shfn,"w"))) { + fclose(inf); +@@ -3814,7 +3814,7 @@ int bounce_file(char *file, char *comment) { + + /* add new bounce COMMENT */ + if (str_eq(hline,"TO")) { +- snprintf(MAXS(tmp),"cannot sent to %s : %s",arg,comment); ++ snprintf(tmp,sizeof(tmp)-1,"cannot sent to %s : %s",arg,comment); + iso2utf(arg,tmp); + fprintf(outf,"COMMENT\t%s\n",arg); + continue; +@@ -3930,7 +3930,7 @@ int check_userspool(char *user, int userconfighome) { + pwe=NULL; + #ifdef NEXT + /* stupid NeXT has a broken getpwnam(); this is a dirty workaround */ +- snprintf(MAXS(tmp),"( nidump passwd . ; nidump passwd / ) | " ++ snprintf(tmp,sizeof(tmp)-1,"( nidump passwd . ; nidump passwd / ) | " + "awk -F: '$1==\"%s\"{print $3,$4;exit}'",user); + pp=popen(tmp,"r"); + if (fgetl(tmp,pp) && *tmp!='\n' && *tmp!=0) { +@@ -3958,8 +3958,8 @@ int check_userspool(char *user, int userconfighome) { + + /* build user spool string */ + user[32]=0; +- snprintf(MAXS(userspool),SPOOL"/%s",user); +- snprintf(MAXS(userconfig),"%s/config",userspool); ++ snprintf(userspool,sizeof(userspool)-1,SPOOL"/%s",user); ++ snprintf(userconfig,sizeof(userconfig)-1,"%s/config",userspool); + + /* create user spool directory for user */ + if (mkdir(userspool,S_IRUSR|S_IWUSR|S_IXUSR)==0) chown(userspool,ruid,rgid); +@@ -4173,14 +4173,16 @@ void cleanup() { + * RETURN: nothing, but terminates program on error + */ + void setreugid() { +- if (rgid && setegid(rgid)<0) { +- printf("490 Internal error on setegid(%u): %s\r\n", +- (unsigned int)rgid,strerror(errno)); ++ if (rgid && rgid != getegid() && setegid(rgid)<0) { ++ printf("490 Internal error on setegid(%u): %s [%u/%u]\r\n", ++ (unsigned int)rgid,strerror(errno), ++ geteuid(), getegid()); + exit(1); + } +- if (ruid && seteuid(ruid)<0) { +- printf("490 Internal error on seteuid(%u): %s\r\n", +- (unsigned int)ruid,strerror(errno)); ++ if (ruid && ruid != geteuid() && seteuid(ruid)<0) { ++ printf("490 Internal error on seteuid(%u): %s [%u/%u]\r\n", ++ (unsigned int)ruid,strerror(errno), ++ geteuid(), getegid()); + exit(1); + } + } +@@ -4222,13 +4224,13 @@ int sudo(const char *user, const char *cmd) { + if (setuid(pwe->pw_uid)<0) exit(1); + + /* set some usefull environment variables */ +- snprintf(MAXS(tmp),"HOME=%s",pwe->pw_dir); ++ snprintf(tmp,sizeof(tmp)-1,"HOME=%s",pwe->pw_dir); + putenv(tmp); +- snprintf(MAXS(tmp),"SHELL=%s",pwe->pw_shell); ++ snprintf(tmp,sizeof(tmp)-1,"SHELL=%s",pwe->pw_shell); + putenv(tmp); +- snprintf(MAXS(tmp),"USER=%s",user); ++ snprintf(tmp,sizeof(tmp)-1,"USER=%s",user); + putenv(tmp); +- snprintf(MAXS(tmp),"LOGNAME=%s",user); ++ snprintf(tmp,sizeof(tmp)-1,"LOGNAME=%s",user); + putenv(tmp); + putenv("TERM="); + +diff --git a/src/sendmsg.c b/src/sendmsg.c +index 23c60b1..2dd4318 100644 +--- a/src/sendmsg.c ++++ b/src/sendmsg.c +@@ -260,10 +260,10 @@ int main(int argc, char *argv[]) { + else { + + /* test if you can receive messages */ +- snprintf(MAXS(line),"FROM %s",login); ++ snprintf(line,sizeof(line)-1,"FROM %s",login); + sock_putline(sockfd,line); + sock_getline(sockfd,line); +- snprintf(MAXS(line),"TO %s",login); ++ snprintf(line,sizeof(line)-1,"TO %s",login); + sock_putline(sockfd,line); + sock_getline(sockfd,line); + if (str_beq(line,"521 ")) { +@@ -281,7 +281,7 @@ int main(int argc, char *argv[]) { + else { + + /* the message tty config file */ +- snprintf(MAXS(msgcf),"%s/%s/config/tty@%s",SPOOL,login,localhost); ++ snprintf(msgcf,sizeof(msgcf)-1,"%s/%s/config/tty@%s",SPOOL,login,localhost); + + /* open tty write permissions if necessary */ + if (receive) { +@@ -293,14 +293,14 @@ int main(int argc, char *argv[]) { + fprintf(outf,"%s\n",tty); + fclose(outf); + if (chmod(tty,S_IRUSR|S_IWUSR|S_IWGRP)<0) { +- snprintf(MAXS(tmp),"cannot open your tty %s for writing",tty); ++ snprintf(tmp,sizeof(tmp)-1,"cannot open your tty %s for writing",tty); + message(prg,'W',tmp); + } else if (argc-optind<1) { + message(prg,'I', + "receiving messages is now restricted to this tty"); + } + } else { +- snprintf(MAXS(tmp),"cannot configure your tty " ++ snprintf(tmp,sizeof(tmp)-1,"cannot configure your tty " + "(no write access to %s)",msgcf); + message(prg,'W',tmp); + } +@@ -318,7 +318,7 @@ int main(int argc, char *argv[]) { + /* is the current tty writable? */ + if (stat(tty,&finfo)<0 || !(finfo.st_mode&S_IWGRP)) { + errno=0; +- snprintf(MAXS(tmp),"your tty %s is write protected; " ++ snprintf(tmp,sizeof(tmp)-1,"your tty %s is write protected; " + "try sendmsg -m",tty); + message(prg,'F',tmp); + } +@@ -401,7 +401,7 @@ int main(int argc, char *argv[]) { + } + + /* send the message */ +- snprintf(MAXS(tmp),"MSG %s",utf_msg); ++ snprintf(tmp,sizeof(tmp)-1,"MSG %s",utf_msg); + sendheader(sockfd,tmp); + + } +@@ -433,7 +433,7 @@ int main(int argc, char *argv[]) { + iso2utf(utf_msg,iso_msg); + + /* send the message */ +- snprintf(MAXS(line),"MSG %s",utf_msg); ++ snprintf(line,sizeof(line)-1,"MSG %s",utf_msg); + sock_putline(sockfd,line); + xonf=0; + sr=getreply(sockfd); +@@ -441,12 +441,12 @@ int main(int argc, char *argv[]) { + + if (!(str_beq(sr,"200") || str_beq(sr,"202"))) { + if (strstr(sr,"Timeout")) { +- snprintf(MAXS(tmp),"server timeout"); ++ snprintf(tmp,sizeof(tmp)-1,"server timeout"); + message(prg,'W',tmp); + sockfd=saft_connect("msg",recipient,user,host,tmp); + sendheader(sockfd,line); + } else { +- snprintf(MAXS(tmp),"server error: %s",sr+4); ++ snprintf(tmp,sizeof(tmp)-1,"server error: %s",sr+4); + message(prg,'X',tmp); + } + } +diff --git a/src/spool.c b/src/spool.c +index a1fdd8e..5f36085 100644 +--- a/src/spool.c ++++ b/src/spool.c +@@ -181,7 +181,7 @@ struct senderlist *scanspool(char *sender) { + /* mega stupid NeXT has broken readdir() */ + #ifdef NEXT + /* open spool dir */ +- snprintf(MAXS(tmp),"ls %s 2>/dev/null",userspool); ++ snprintf(tmp,sizeof(tmp)-1,"ls %s 2>/dev/null",userspool); + if ((pp=popen(tmp,"r")) == NULL) return(NULL); + + /* scan through spool directory */ +@@ -216,7 +216,7 @@ struct senderlist *scanspool(char *sender) { + #endif + + /* open header file */ +- snprintf(MAXS(file),"%s/%d.h",userspool,id); ++ snprintf(file,sizeof(file)-1,"%s/%d.h",userspool,id); + hf=rfopen(file,"r"); + + /* error? */ +@@ -224,7 +224,7 @@ struct senderlist *scanspool(char *sender) { + + /* called from receive client? */ + if (client) { +- snprintf(MAXS(msg),"cannot open spool file %s",file); ++ snprintf(msg,sizeof(msg)-1,"cannot open spool file %s",file); + message("",'E',msg); + } + +@@ -246,9 +246,9 @@ struct senderlist *scanspool(char *sender) { + compress=""; + + /* does the spool data file exist? */ +- snprintf(MAXS(file),"%s/%d.d",userspool,id); ++ snprintf(file,sizeof(file)-1,"%s/%d.d",userspool,id); + if (stat(file,&finfo)<0) { +- snprintf(MAXS(file),"%s/%d.h",userspool,id); ++ snprintf(file,sizeof(file)-1,"%s/%d.h",userspool,id); + unlink(file); + continue; + } +@@ -260,7 +260,7 @@ struct senderlist *scanspool(char *sender) { + if (keep>0 && (ctime-rtime)/DAYSEC>=keep) { + fclose(hf); + unlink(file); +- snprintf(MAXS(file),"%s/%d.h",userspool,id); ++ snprintf(file,sizeof(file)-1,"%s/%d.h",userspool,id); + unlink(file); + continue; + } +@@ -293,7 +293,7 @@ struct senderlist *scanspool(char *sender) { + if (str_eq(hline,"FROM")) { + if ((cp=strchr(arg,' '))) { + *cp=0; +- snprintf(MAXS(tmp),"%s (%s)",arg,cp+1); ++ snprintf(tmp,sizeof(tmp)-1,"%s (%s)",arg,cp+1); + } else + strcpy(tmp,arg); + utf2iso(0,from,NULL,NULL,tmp); +@@ -372,9 +372,9 @@ struct senderlist *scanspool(char *sender) { + /* junk file expired? */ + if (*from==0 || *fname==0 || + (tsize!=csize && deljunk>0 && (ctime-rtime)/DAYSEC>=deljunk)) { +- snprintf(MAXS(file),"%s/%d.d",userspool,id); ++ snprintf(file,sizeof(file)-1,"%s/%d.d",userspool,id); + unlink(file); +- snprintf(MAXS(file),"%s/%d.h",userspool,id); ++ snprintf(file,sizeof(file)-1,"%s/%d.h",userspool,id); + unlink(file); + continue; + } +@@ -539,7 +539,7 @@ struct hostlist *scanoutspool(char *sender) { + /* mega stupid NeXT has broken readdir() */ + #ifdef NEXT + /* open spool dir */ +- snprintf(MAXS(tmp),"cd %s;ls %s_*.h 2>/dev/null",OUTGOING,sender); ++ snprintf(tmp,sizeof(tmp)-1,"cd %s;ls %s_*.h 2>/dev/null",OUTGOING,sender); + if ((pp=popen(tmp,"r")) == NULL) return(NULL); + + /* scan through spool directory */ +@@ -561,18 +561,18 @@ struct hostlist *scanoutspool(char *sender) { + #endif + + /* look for header files */ +- snprintf(MAXS(tmp),"%s*.h",sender); ++ snprintf(tmp,sizeof(tmp)-1,"%s*.h",sender); + if (simplematch(hfn,tmp,1)==0) continue; + + strcpy(tmp,hfn); +- snprintf(MAXS(hfn),OUTGOING"/%s",tmp); ++ snprintf(hfn,sizeof(hfn)-1,OUTGOING"/%s",tmp); + + /* open header file */ + if ((hf=rfopen(hfn,"r")) == NULL) { + + /* called from receive client? */ + if (client) { +- snprintf(MAXS(msg),"cannot open outgoing spool file %s",hfn); ++ snprintf(msg,sizeof(msg)-1,"cannot open outgoing spool file %s",hfn); + message("",'E',msg); + } + +@@ -776,19 +776,19 @@ int delete_sf(struct filelist *flp, int verbose) { + extern int client; /* flag to determine client or server */ + extern char userspool[]; /* user spool directory */ + +- snprintf(MAXS(file),"%s/%d.d",userspool,flp->id); ++ snprintf(file,sizeof(file)-1,"%s/%d.d",userspool,flp->id); + unlink(file); +- snprintf(MAXS(file),"%s/%d.h",userspool,flp->id); ++ snprintf(file,sizeof(file)-1,"%s/%d.h",userspool,flp->id); + utf2iso(1,NULL,fname,NULL,flp->fname); + if(unlink(file)<0) { + if (client) { +- snprintf(MAXS(msg),"cannot delete spoolfile #%d",flp->id); ++ snprintf(msg,sizeof(msg)-1,"cannot delete spoolfile #%d",flp->id); + message("",'W',msg); + } + return(-1); + } else { + if (verbose) { +- snprintf(MAXS(msg),"%s deleted",fname); ++ snprintf(msg,sizeof(msg)-1,"%s deleted",fname); + message("",'I',msg); + } + return(0); +@@ -874,7 +874,7 @@ int spoolid(int maxfiles) { + if (n>maxfiles) return(-n); + + /* try to create header spool file */ +- snprintf(MAXS(file),"%d.h",id); ++ snprintf(file,sizeof(file)-1,"%d.h",id); + fd=open(file,O_CREAT|O_EXCL,S_IRUSR|S_IWUSR); + + /* successfull? */ +@@ -883,7 +883,7 @@ int spoolid(int maxfiles) { + close(fd); + + /* create data spool file */ +- snprintf(MAXS(file),"%d.d",id); ++ snprintf(file,sizeof(file)-1,"%d.d",id); + close(open(file,O_CREAT|O_LARGEFILE,S_IRUSR|S_IWUSR)); + + return(id); -- 2.39.2