--- /dev/null
+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
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>Label</key>
+ <string>#{plist_name}</string>
+ <key>ProgramArguments</key>
+ <array>
+ <string>#{HOMEBREW_PREFIX}/sbin/sendfiled</string>
+ </array>
+ <key>UserName</key>
+ <string>root</string>
+ <key>inetdCompatibility</key>
+ <dict>
+ <key>Wait</key>
+ <false/>
+ </dict>
+ <key>Sockets</key>
+ <dict>
+ <key>Listeners</key>
+ <dict>
+ <key>SockServiceName</key>
+ <string>saft</string>
+ </dict>
+ </dict>
+ <key>WorkingDirectory</key>
+ <string>#{HOMEBREW_PREFIX}</string>
+</dict>
+</plist>
+ 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;i<argc;i++) {
+ 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)) {
+@@ -683,11 +683,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++;
+ }
+@@ -751,7 +751,7 @@ void rexit(int n) {
+
+ /* change back to starting directory */
+ if (chdir(swd)<0) {
+- snprintf(MAXS(tmp),"cannot change back to %s",swd);
++ snprintf(tmp,sizeof(tmp)-1,"cannot change back to %s",swd);
+ message(prg,'E',tmp);
+ } else
+ if (verbose) printf("shell-call: %s\n",rfilen);
+@@ -776,7 +776,7 @@ int delete_file(int sockfd, int number) {
+ char line[MAXLEN]; /* one line of text */
+
+ /* send LIST command */
+- snprintf(MAXS(line),"DEL %d",number);
++ snprintf(line,sizeof(line)-1,"DEL %d",number);
+ sock_putline(sockfd,line);
+
+ sock_getline(sockfd,line);
+@@ -827,7 +827,7 @@ int get_list(int sockfd, const char *server, const char *id, FILE *listf) {
+ /* invalid answer? */
+ if (!str_beq(line,"250")) {
+ errno=0;
+- snprintf(MAXS(tmp),"invalid answer from server: %s",line+4);
++ snprintf(tmp,sizeof(tmp)-1,"invalid answer from server: %s",line+4);
+ message(prg,'E',tmp);
+ return(n);
+ }
+@@ -956,14 +956,14 @@ int get_file(int sockfd, int number, int ptso) {
+ if (!id) message(prg,'F',"cannot create local spool file");
+
+ /* 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,S_IRUSR|S_IWUSR);
+ shfd=open(shfile,O_WRONLY|O_CREAT,S_IRUSR|S_IWUSR);
+ if (shfd<0 || sdfd<0) message(prg,'F',"cannot create local spool file");
+ }
+
+- snprintf(MAXS(tmp),"GET HEADER %d",number);
++ snprintf(tmp,sizeof(tmp)-1,"GET HEADER %d",number);
+ sock_putline(sockfd,tmp);
+
+ for (;;) {
+@@ -981,7 +981,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);
+ }
+@@ -1003,7 +1003,7 @@ int get_file(int sockfd, int number, int ptso) {
+ if (str_beq(line+4,"FROM")) {
+ if ((cp=strchr(line+10,' '))) {
+ *cp=0;
+- snprintf(MAXS(tmp),"%s (%s)",line+9,cp+1);
++ snprintf(tmp,sizeof(tmp)-1,"%s (%s)",line+9,cp+1);
+ *cp=' ';
+ } else
+ strcpy(tmp,line+9);
+@@ -1050,15 +1050,15 @@ int get_file(int sockfd, int number, int ptso) {
+
+ if (quiet<2) {
+ if (flp && flp->csize==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)<packet_size) {
+ if (quiet<3) {
+ if (!quiet) printf("\n");
+- snprintf(MAXS(tmp),"error reading %s",iso_name);
++ snprintf(tmp,sizeof(tmp)-1,"error reading %s",iso_name);
+ message("",'E',tmp);
+ }
+ close(ffd);
+@@ -844,7 +844,7 @@ int send_data(int sockfd, off_t size, const char *file,
+ if ((n=size-nblocks*packet_size) > 0) {
+ if (readn(ffd,packet,n)<n) {
+ if (quiet<3) {
+- snprintf(MAXS(tmp),"error reading %s",iso_name);
++ snprintf(tmp,sizeof(tmp)-1,"error reading %s",iso_name);
+ message("",'E',tmp);
+ }
+ close(ffd);
+@@ -882,10 +882,10 @@ int send_data(int sockfd, off_t size, const char *file,
+ 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);
+
+@@ -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 (i<min && i>lastused && i>nextfree) min=i;
+ }
+- snprintf(MAXS(ofile),"%d.h",min);
++ snprintf(ofile,sizeof(ofile)-1,"%d.h",min);
+ for (i=nextfree; i<min; i++) {
+- snprintf(MAXS(nfile),"%d.h",i);
++ snprintf(nfile,sizeof(nfile)-1,"%d.h",i);
+ if (stat(nfile,&finfo)<0 || finfo.st_size==0) {
+ unlink(nfile);
+ if (rename(ofile,nfile)<0) {
+- snprintf(MAXS(tmp),"cannot rename %s to %s",ofile,nfile);
++ snprintf(tmp,sizeof(tmp)-1,"cannot rename %s to %s",ofile,nfile);
+ message(prg,'F',tmp);
+ }
+- snprintf(MAXS(nfile),"%d.d",i);
+- snprintf(MAXS(ofile),"%d.d",min);
++ snprintf(nfile,sizeof(nfile)-1,"%d.d",i);
++ snprintf(ofile,sizeof(ofile)-1,"%d.d",min);
+ unlink(nfile);
+ if (rename(ofile,nfile)<0) {
+- snprintf(MAXS(tmp),"cannot rename %s to %s",ofile,nfile);
++ snprintf(tmp,sizeof(tmp)-1,"cannot rename %s to %s",ofile,nfile);
+ message(prg,'F',tmp);
+ }
+ nextfree=i+1;
+diff --git a/src/sendfile.c b/src/sendfile.c
+index 9f84393..09f9f52 100644
+--- a/src/sendfile.c
++++ b/src/sendfile.c
+@@ -651,7 +651,7 @@ const char
+ if (strstr(force_compress,"gzip")) compress=S_GZIP;
+ if (strstr(force_compress,"bzip2")) compress=S_BZIP2;
+ if (!*compress) {
+- snprintf(MAXS(tmp),"unsupported compression program %s",force_compress);
++ snprintf(tmp,sizeof(tmp)-1,"unsupported compression program %s",force_compress);
+ errno=0;
+ message(prg,'F',tmp);
+ }
+@@ -660,7 +660,7 @@ const char
+ } else if (*compress) {
+
+ #if 0
+- snprintf(MAXS(tmp),"%s --help 2>&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<argc-1;i++) {
+ strcat(cmd,"'");
+ strcat(cmd,argv[i]);
+@@ -764,7 +764,7 @@ const char
+ pgpcrypt='e';
+ compress="";
+ pop++;
+- snprintf(MAXS(pgprid),"%s@%s",recipient,host);
++ snprintf(pgprid,sizeof(pgprid)-1,"%s@%s",recipient,host);
+
+ /* is there a recipient id? */
+ if (*pop>'\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<argc-1; fn++) {
+- snprintf(MAXS(sdfn),"%s.d",argv[fn]);
+- snprintf(MAXS(shfn),"%s.h",argv[fn]);
+- if (info) snprintf(MAXS(tinfo),"#%d/%d: ",fn-optind+1,argc-optind-1);
++ snprintf(sdfn,sizeof(sdfn)-1,"%s.d",argv[fn]);
++ snprintf(shfn,sizeof(shfn)-1,"%s.h",argv[fn]);
++ if (info) snprintf(tinfo,sizeof(tinfo)-1,"#%d/%d: ",fn-optind+1,argc-optind-1);
+
+ /* try to open spool header file */
+ if (!(shf=rfopen(shfn,"r"))) {
+- snprintf(MAXS(tmp),"cannot open spool file #%s",argv[fn]);
++ snprintf(tmp,sizeof(tmp)-1,"cannot open spool file #%s",argv[fn]);
+ message(prg,'E',tmp);
+ continue;
+ }
+@@ -1091,7 +1091,7 @@ const char
+ strcpy(comment,strchr(line,' ')+1);
+ if ((cp=strchr(comment,' '))) {
+ *cp=0;
+- snprintf(MAXS(tmp),"%s+ACA-(%s)",comment,cp+1);
++ snprintf(tmp,sizeof(tmp)-1,"%s+ACA-(%s)",comment,cp+1);
+ strcpy(comment,tmp);
+ }
+ continue;
+@@ -1129,7 +1129,7 @@ const char
+ if (str_beq(reply,"200 ")) break;
+
+ /* error! */
+- snprintf(MAXS(tmp),"cannot send %s : %s",file,reply+4);
++ snprintf(tmp,sizeof(tmp)-1,"cannot send %s : %s",file,reply+4);
+ errno=0;
+ message(prg,'E',tmp);
+ fclose(inf);
+@@ -1142,15 +1142,15 @@ const char
+ /* recompress spool file */
+ if (str_eq(type,S_BZIP2)) {
+ if (str_eq(compress,S_GZIP))
+- snprintf(MAXS(cmd),"%s -d <%s|%s>%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; fn<argc-1; fn++) {
+- if (info) snprintf(MAXS(tinfo),"#%d/%d: ",fn-optind+1,argc-optind-1);
++ if (info) snprintf(tinfo,sizeof(tinfo)-1,"#%d/%d: ",fn-optind+1,argc-optind-1);
+
+ /* file from stdin? */
+ if (stdinf) {
+@@ -1549,9 +1549,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) {
+@@ -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 (speed<lanspeed) return(1);
+
+ if (verbose) {
+- snprintf(MAXS(msg),
++ snprintf(msg,sizeof(msg)-1,
+ "disabling compressing because last link speed to %s was %d kB/s",
+ host,speed);
+ message(prg,'I',msg);
+- snprintf(MAXS(msg),"LAN speed is defined as min %d kB/s",lanspeed);
++ snprintf(msg,sizeof(msg)-1,"LAN speed is defined as min %d kB/s",lanspeed);
+ message(prg,'I',msg);
+ }
+
+@@ -2587,14 +2587,14 @@ void notespeed(const char *host, unsigned long size, float ttime) {
+ if (ttime<1 || size<102400) return;
+
+ /* 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;
+ 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 ((outf=rfopen(hostfile,"w"))) {
+ fprintf(outf,"%d\n",(int)(size/ttime/1.024)); /* kB/s */
+@@ -2658,7 +2658,7 @@ void spooled_info(const char *file, const char *sdf, int compressed) {
+ if (quiet>1) 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)+4<MAXLEN) {
+- snprintf(MAXS(utfsender),"%s@%s %s",arg,peer,real);
+- snprintf(MAXS(tmp),"%s@%s (%s)",arg,peer,real);
++ snprintf(utfsender,sizeof(utfsender)-1,"%s@%s %s",arg,peer,real);
++ snprintf(tmp,sizeof(tmp)-1,"%s@%s (%s)",arg,peer,real);
+ utf2iso(0,sender,NULL,NULL,tmp);
+ if ((cp=strchr(utfsender,' '))) {
+ *cp=0;
+- snprintf(MAXS(logsender),"%s (%s)",utfsender,cp+1);
++ snprintf(logsender,sizeof(logsender)-1,"%s (%s)",utfsender,cp+1);
+ *cp=' ';
+ } else
+ strcpy(logsender,utfsender);
+ } else {
+- snprintf(MAXS(utfsender),"???@%s",peer);
+- snprintf(MAXS(sender),"???@%s",peer);
++ snprintf(utfsender,sizeof(utfsender)-1,"???@%s",peer);
++ snprintf(sender,sizeof(sender)-1,"???@%s",peer);
+ }
+
+ reply(200);
+@@ -1087,7 +1087,7 @@ int main(int argc, char *argv[]) {
+ if ((cp=strchr(date,'T'))) *cp=' ';
+ if (!strchr(date,'-')) {
+ strcpy(tmp,date);
+- snprintf(MAXS(date),"%c%c%c%c-%c%c-%c%c %c%c:%c%c:%c%c",
++ snprintf(date,sizeof(date)-1,"%c%c%c%c-%c%c-%c%c %c%c:%c%c:%c%c",
+ tmp[0],tmp[1],tmp[2],tmp[3],
+ tmp[4],tmp[5],
+ tmp[6],tmp[7],
+@@ -1402,7 +1402,7 @@ int main(int argc, char *argv[]) {
+ timetick=time(0);
+ if (bell) strcat(msg,"\007");
+ strftime(currentdate,9,"%H:%M",localtime(&timetick));
+- snprintf(MAXS(msgh),"Message from %s at %s :",sender,currentdate);
++ snprintf(msgh,sizeof(msgh)-1,"Message from %s at %s :",sender,currentdate);
+
+ /* try to send to recipient ttys */
+ if (msg2tty(recipient,msgh,msg,O_SYNC)<0)
+@@ -1412,7 +1412,7 @@ int main(int argc, char *argv[]) {
+ /* log sender address */
+ if (rgid) setegid(rgid);
+ if (ruid) seteuid(ruid);
+- snprintf(MAXS(tmp),"%s/msg@%s",userconfig,localhost);
++ snprintf(tmp,sizeof(tmp)-1,"%s/msg@%s",userconfig,localhost);
+ if ((outf=rfopen(tmp,"w"))) {
+ strcpy(tmp,sender);
+ if ((cp=strchr(tmp,' '))) *cp=0;
+@@ -1566,7 +1566,7 @@ int main(int argc, char *argv[]) {
+
+ /* open spool data file for appending */
+ id=flp->id;
+- 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)<hsize) reply(412);
+ }
+@@ -2537,7 +2537,7 @@ int msg2tty(const char *recipient, const char *msgh, char *msg, int mode) {
+ /* change effective uid to recipient for security reasons */
+ setreugid();
+
+- snprintf(MAXS(msgcf),"%s/config/tty@%s",userspool,localhost);
++ snprintf(msgcf,sizeof(msgcf)-1,"%s/config/tty@%s",userspool,localhost);
+
+ /* force writing to all ttys which are open? */
+ if (*msg && str_beq(msg,"wall!")) {
+@@ -2546,9 +2546,9 @@ int msg2tty(const char *recipient, const char *msgh, char *msg, int mode) {
+ }
+
+ if (*msg)
+- snprintf(MAXS(output),"\r\n%s\n\r%s\r\n",msgh,msg);
++ snprintf(output,sizeof(output)-1,"\r\n%s\n\r%s\r\n",msgh,msg);
+ else
+- snprintf(MAXS(output),"\r\n%s\n\r",msgh);
++ snprintf(output,sizeof(output)-1,"\r\n%s\n\r",msgh);
+
+ /* is there a message control file? */
+ if (!wall && success<=0 && (inf=rfopen(msgcf,"r"))) {
+@@ -2586,7 +2586,7 @@ int msg2tty(const char *recipient, const char *msgh, char *msg, int mode) {
+ /* scan through utmp (currently logged in users) */
+ while (read(utmpfd,(char *)&uinfo,sizeof(uinfo))>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);