Patrick Williams | b48b7b4 | 2016-08-17 15:04:38 -0500 | [diff] [blame^] | 1 | From 898e9514bc889b4a540f667efed95a5af101c824 Mon Sep 17 00:00:00 2001 |
| 2 | From: Li xin <lixin.fnst@cn.fujitsu.com> |
| 3 | Date: Tue, 2 Dec 2014 07:00:36 +0900 |
| 4 | Subject: [PATCH 1/3] From debian to fix compile errors |
| 5 | |
| 6 | Signed-off-by: Li Xin <lixin.fnst@cn.fujitsu.com> |
| 7 | --- |
| 8 | src/Makefile.0 | 7 +++---- |
| 9 | src/autoconf | 64 +++++++++++++------------------------------------------- |
| 10 | src/comsat.c | 65 +++++++++++++++++++-------------------------------------- |
| 11 | src/fields.c | 6 +++--- |
| 12 | src/foldinfo.h | 2 +- |
| 13 | src/formail.c | 6 +++--- |
| 14 | src/formisc.c | 2 +- |
| 15 | src/formisc.h | 2 +- |
| 16 | src/mailfold.c | 14 ++++++++++--- |
| 17 | src/manconf.c | 2 +- |
| 18 | src/memblk.c | 24 ++++++++++----------- |
| 19 | src/memblk.h | 2 +- |
| 20 | src/network.h | 10 ++------- |
| 21 | src/pipes.c | 10 ++++----- |
| 22 | src/procmail.c | 3 +-- |
| 23 | src/recommend.c | 2 +- |
| 24 | 16 files changed, 81 insertions(+), 140 deletions(-) |
| 25 | |
| 26 | diff --git a/src/Makefile.0 b/src/Makefile.0 |
| 27 | index 6eb5b51..15a2039 100644 |
| 28 | --- a/src/Makefile.0 |
| 29 | +++ b/src/Makefile.0 |
| 30 | @@ -40,7 +40,7 @@ multigram: multigram.$(O) $(MG_OBJ) setid |
| 31 | @cd ..; $(MAKE) config.check |
| 32 | |
| 33 | _autotst: _autotst.$(O) sublib.c sublib.h |
| 34 | - $(CC) $(CFLAGS) $@.$(O) -o $@ $(LDFLAGS) |
| 35 | + gcc $@.$(O) -o $@ $(LDFLAGS) |
| 36 | |
| 37 | ../autoconf.h: autoconf Makefile ../patchlevel.h |
| 38 | @echo No this was not make -n >make_n |
| 39 | @@ -175,17 +175,16 @@ recommend: recommend.$(O) sublib.$(O) |
| 40 | |
| 41 | ../man/man.sed: manconf.c ../autoconf.h ../config.h includes.h procmail.h |
| 42 | ../man/man.sed: ../patchlevel.h |
| 43 | - @$(CC) $(CFLAGS) "-DBINDIR=\"$(VISIBLE_BINDIR)\"" -o _autotst \ |
| 44 | + gcc "-DBINDIR=\"$(VISIBLE_BINDIR)\"" -o _autotst \ |
| 45 | manconf.c $(LDFLAGS) |
| 46 | @./_autotst $@ |
| 47 | @echo Housekeeping file >$@ |
| 48 | - @$(RM) _autotst |
| 49 | |
| 50 | clean: |
| 51 | $(RM) -r _locktest |
| 52 | $(RM) procmail.$(O) $(PM_OBJ) lockfile.$(O) $(LF_OBJ) formail.$O \ |
| 53 | $(FM_OBJ) multigram.$(O) $(MG_OBJ) $(BINSS) multigram ../autoconf.h \ |
| 54 | - _autotst* lookfor _locktst* grepfor recommend recommend.$(O) manconf \ |
| 55 | + lookfor _locktst* grepfor recommend recommend.$(O) manconf \ |
| 56 | _Makefile lock.log *core* targetdir.h setid setid.$(O) gethome \ |
| 57 | gethome.$(O) make_n realloc.log |
| 58 | |
| 59 | diff --git a/src/autoconf b/src/autoconf |
| 60 | index 1cb4c42..ff78048 100755 |
| 61 | --- a/src/autoconf |
| 62 | +++ b/src/autoconf |
| 63 | @@ -68,8 +68,6 @@ |
| 64 | # #define NOfsync |
| 65 | #Ok #define endpwent() |
| 66 | #Ok #define endgrent() |
| 67 | -#Ok #define endhostent() |
| 68 | -#Ok #define endservent() |
| 69 | #Ok #define endprotoent() |
| 70 | # #define h_0addr_list h_addr |
| 71 | #Ok #define NOpw_passwd |
| 72 | @@ -896,7 +894,7 @@ int main(){int i=0; |
| 73 | {uid_t vuid_t;i+=vuid_t=1;} |
| 74 | {gid_t vgid_t;i+=vgid_t=1;} |
| 75 | #ifndef NO_COMSAT |
| 76 | - {struct hostent vhostent;i+=!(vhostent.h_addr_list=0);} |
| 77 | + {struct addrinfo res; i+=!(res.ai_socktype=0);} |
| 78 | #endif |
| 79 | #ifndef NOuname |
| 80 | {struct utsname vutsname;i+=!(*vutsname.nodename='\0');} |
| 81 | @@ -917,8 +915,6 @@ do |
| 82 | test -z "$i3" && grepfor mode_t 'typedef int mode_t;' && i3=I |
| 83 | test -z "$i4" && grepfor uid_t 'typedef int uid_t;' && i4=I |
| 84 | test -z "$i5" && grepfor gid_t 'typedef int gid_t;' && i5=I |
| 85 | - test -z "$i6" && grepfor h_addr_list '#define h_0addr_list h_addr' && i6=I |
| 86 | - test -z "$i6" && grepfor hostent '#define h_0addr_list h_addr' && i6=I |
| 87 | test -z "$i6" && grepfor member '#define h_0addr_list h_addr' && i6=I |
| 88 | test -z "$i7" && grepfor utsname "#define NOuname \ |
| 89 | /* <sys/utsname.h> is there, but empty */" && i7=I |
| 90 | @@ -1048,8 +1044,12 @@ int main(){char a[2]; |
| 91 | {struct utsname b;uname(&b);} |
| 92 | #endif |
| 93 | #ifndef NO_COMSAT |
| 94 | - gethostbyname("0");getprotobyname(COMSATprotocol);endhostent();endservent(); |
| 95 | - endprotoent(); |
| 96 | + { |
| 97 | + struct addrinfo *res, hints; |
| 98 | + memset(&hints, '\0', sizeof(hints)); |
| 99 | + if(getaddrinfo(COMSAThost,BIFF_serviceport,&hints,&res)) |
| 100 | + freeaddrinfo(res); |
| 101 | + } |
| 102 | #endif |
| 103 | _exit(0); |
| 104 | return 0;} |
| 105 | @@ -1103,14 +1103,9 @@ grepfor uname "\ |
| 106 | /* <sys/utsname.h> defines it, the libraries don't */" |
| 107 | grepfor endpwent '#define endpwent()' |
| 108 | grepfor endgrent '#define endgrent()' |
| 109 | -if grepfor gethostbyname '#define NO_COMSAT' |
| 110 | +if grepfor getaddrinfo '#define NO_COMSAT' |
| 111 | then |
| 112 | : |
| 113 | -else |
| 114 | - grepfor getprotobyname '#define UDP_protocolno 17' |
| 115 | - grepfor endhostent '#define endhostent()' |
| 116 | - grepfor endservent '#define endservent()' |
| 117 | - grepfor endprotoent '#define endprotoent()' |
| 118 | fi |
| 119 | grepfor strstr '#define SLOWstrstr' || |
| 120 | grepfor clock '#define SLOWstrstr' |
| 121 | @@ -1239,39 +1234,9 @@ int main(argc,argv)int argc;const char*argv[]; |
| 122 | printf("/* Insufficient memory to perform the benchmark! */\n"); |
| 123 | #endif /* SLOWstrstr */ |
| 124 | #ifndef NO_COMSAT |
| 125 | -#ifndef UDP_protocolno |
| 126 | - ;{ const struct protoent*p; |
| 127 | - if(p=getprotobyname(COMSATprotocol)) |
| 128 | - { printf("#define UDP_protocolno %d\n",p->p_proto); |
| 129 | -#else |
| 130 | - ;{ if(1) |
| 131 | - { |
| 132 | -#endif |
| 133 | - ;{ const struct servent*serv; |
| 134 | - if(serv=getservbyname(COMSATservice,COMSATprotocol)) |
| 135 | - printf("#define BIFF_serviceport \"%d\"\n", |
| 136 | - ntohs(serv->s_port)); |
| 137 | - } |
| 138 | -#ifdef AF_INET |
| 139 | - ;{ const struct hostent*host; |
| 140 | - if(!strcmp("localhost",COMSAThost)&& |
| 141 | - (host=gethostbyname(COMSAThost))&& |
| 142 | - host->h_0addr_list&&host->h_addrtype==AF_INET&& |
| 143 | - host->h_length) |
| 144 | - { int j=host->h_length; |
| 145 | - const unsigned char*ad=(void*)host->h_0addr_list; |
| 146 | - printf("#define IP_localhost {"); |
| 147 | - printf("%d",*ad++); |
| 148 | - while(--j) |
| 149 | - printf(",%d",*ad++); |
| 150 | - puts("}"); |
| 151 | - } |
| 152 | - } |
| 153 | +#ifndef AF_INET |
| 154 | + puts("#define NO_COMSAT"); |
| 155 | #endif /* AF_INET */ |
| 156 | - } |
| 157 | - else |
| 158 | - puts("#define NO_COMSAT"); |
| 159 | - } |
| 160 | #endif /* NO_COMSAT */ |
| 161 | ;{ unsigned long s=(size_t)~0;int bits; |
| 162 | for(bits=1;s>>=1;bits++); |
| 163 | @@ -1470,15 +1435,14 @@ cat /usr/lib/sendmail.cf /etc/sendmail.cf /etc/mail/sendmail.cf 2>$DEVNULL | |
| 164 | grep 'Mlocal.*procmail' >$DEVNULL || |
| 165 | echo '#define CF_no_procmail_yet' >>$ACONF |
| 166 | |
| 167 | -cat /usr/lib/sendmail.cf /etc/sendmail.cf /etc/mail/sendmail.cf 2>$DEVNULL | |
| 168 | - grep '^V' >$DEVNULL || |
| 169 | - echo '#define buggy_SENDMAIL' >>$ACONF |
| 170 | +# cat /usr/lib/sendmail.cf /etc/sendmail.cf /etc/mail/sendmail.cf 2>$DEVNULL | |
| 171 | +# grep '^V' >$DEVNULL || |
| 172 | +# echo '#define buggy_SENDMAIL' >>$ACONF |
| 173 | |
| 174 | lpath='/bin' |
| 175 | bins="/bin" |
| 176 | |
| 177 | -for newd in /usr/bin /usr/ucb /usr/5bin $BINDIR /local/bin /usr/local/bin \ |
| 178 | - /global/bin /usr/bin/X11 /usr/X*/bin |
| 179 | +for newd in /usr/bin $BINDIR /usr/bin/X11 /usr/X*/bin |
| 180 | do |
| 181 | if test -d $newd |
| 182 | then |
| 183 | diff --git a/src/comsat.c b/src/comsat.c |
| 184 | index 77dba34..5082b16 100644 |
| 185 | --- a/src/comsat.c |
| 186 | +++ b/src/comsat.c |
| 187 | @@ -27,7 +27,8 @@ static /*const*/char rcsid[]= |
| 188 | #include "comsat.h" |
| 189 | |
| 190 | static int csvalid; /* is it turned on with a good address? */ |
| 191 | -static struct sockaddr_in csaddr; |
| 192 | +static struct addrinfo cai; |
| 193 | +static struct sockaddr *csaddr; |
| 194 | static char*cslastf,*cslgname; |
| 195 | |
| 196 | void setlfcs(folder)const char*folder; /* set lastfolder for comsat */ |
| 197 | @@ -62,56 +63,32 @@ void setlgcs(name)const char*name; /* set logname for comsat */ |
| 198 | } |
| 199 | |
| 200 | int setcomsat(chp)const char*chp; |
| 201 | -{ char*chad;int newvalid; struct sockaddr_in newaddr; |
| 202 | +{ char*chad;int newvalid; struct addrinfo *res, hints; |
| 203 | chad=strchr(chp,SERV_ADDRsep); /* @ separator? */ |
| 204 | if(!chad&&!renvint(-1L,chp)) |
| 205 | return csvalid=0; /* turned off comsat */ |
| 206 | newvalid=1; |
| 207 | if(chad) |
| 208 | *chad++='\0'; /* split the specifier */ |
| 209 | + if(!chad||!*chp) /* no service */ |
| 210 | + chp=BIFF_serviceport; /* new balls please! */ |
| 211 | if(!chad||!*chad) /* no host */ |
| 212 | -#ifndef IP_localhost /* Is "localhost" preresolved? */ |
| 213 | chad=COMSAThost; /* nope, use default */ |
| 214 | -#else /* IP_localhost */ |
| 215 | - { static const unsigned char ip_localhost[]=IP_localhost; |
| 216 | - newaddr.sin_family=AF_INET; |
| 217 | - tmemmove(&newaddr.sin_addr,ip_localhost,sizeof ip_localhost); |
| 218 | - } |
| 219 | - else |
| 220 | -#endif /* IP_localhost */ |
| 221 | - { const struct hostent*host; /* what host? paranoid checks */ |
| 222 | - if(!(host=gethostbyname(chad))||!host->h_0addr_list) |
| 223 | - { bbzero(&newaddr.sin_addr,sizeof newaddr.sin_addr); |
| 224 | - newvalid=0; /* host can't be found, too bad */ |
| 225 | - } |
| 226 | - else |
| 227 | - { newaddr.sin_family=host->h_addrtype; /* address number found */ |
| 228 | - tmemmove(&newaddr.sin_addr,host->h_0addr_list,host->h_length); |
| 229 | - } |
| 230 | - endhostent(); |
| 231 | - } |
| 232 | - if(newvalid) /* so far, so good */ |
| 233 | - { int s; |
| 234 | - if(!*chp) /* no service */ |
| 235 | - chp=BIFF_serviceport; /* new balls please! */ |
| 236 | - s=strtol(chp,&chad,10); |
| 237 | - if(chp!=chad) /* the service is not numeric */ |
| 238 | - newaddr.sin_port=htons((short)s); /* network order */ |
| 239 | - else |
| 240 | - { const struct servent*serv; |
| 241 | - serv=getservbyname(chp,COMSATprotocol); /* so get its no. */ |
| 242 | - if(serv) |
| 243 | - newaddr.sin_port=serv->s_port; |
| 244 | - else |
| 245 | - { newaddr.sin_port=htons((short)0); /* no such service */ |
| 246 | - newvalid=0; |
| 247 | - } |
| 248 | - endservent(); |
| 249 | - } |
| 250 | - } |
| 251 | + bzero(&hints,sizeof(hints)); |
| 252 | + hints.ai_socktype=SOCK_DGRAM; |
| 253 | + hints.ai_flags=AI_ADDRCONFIG; |
| 254 | + if(getaddrinfo(chad,chp,&hints,&res)) |
| 255 | + newvalid=0; |
| 256 | + |
| 257 | onguard(); /* update the address atomically */ |
| 258 | if(csvalid=newvalid) |
| 259 | - tmemmove(&csaddr,&newaddr,sizeof(newaddr)); |
| 260 | + { if(csaddr) |
| 261 | + free(csaddr); |
| 262 | + csaddr=malloc(res->ai_addrlen); |
| 263 | + tmemmove(csaddr,res->ai_addr,res->ai_addrlen); |
| 264 | + tmemmove(&cai,res,sizeof(cai)); |
| 265 | + freeaddrinfo(res); |
| 266 | + } |
| 267 | offguard(); |
| 268 | return newvalid; |
| 269 | } |
| 270 | @@ -120,7 +97,7 @@ void sendcomsat(folder)const char*folder; |
| 271 | { int s;const char*p; |
| 272 | if(!csvalid||!buf) /* is comat on and set to a valid address? */ |
| 273 | return; |
| 274 | - if(!*cslgname||strlen(cslgname)+2>linebuf) /* is $LOGNAME bogus? */ |
| 275 | + if(!cslgname||!*cslgname||strlen(cslgname)+2>linebuf)/* is $LOGNAME bogus? */ |
| 276 | return; |
| 277 | if(!(p=folder?folder:cslastf)) /* do we have a folder? */ |
| 278 | return; |
| 279 | @@ -132,8 +109,8 @@ void sendcomsat(folder)const char*folder; |
| 280 | } |
| 281 | strlcat(buf,COMSATxtrsep,linebuf); /* custom seperator */ |
| 282 | strlcat(buf,p,linebuf); /* where was it delivered? */ |
| 283 | - if((s=socket(AF_INET,SOCK_DGRAM,UDP_protocolno))>=0) |
| 284 | - { sendto(s,buf,strlen(buf),0,(struct sockaddr*)&csaddr,sizeof(csaddr)); |
| 285 | + if((s=socket(cai.ai_family,cai.ai_socktype,cai.ai_protocol))>=0) |
| 286 | + { sendto(s,buf,strlen(buf),0,csaddr,cai.ai_addrlen); |
| 287 | rclose(s); |
| 288 | yell("Notified comsat:",buf); |
| 289 | } |
| 290 | diff --git a/src/fields.c b/src/fields.c |
| 291 | index a2bd77f..37ed154 100644 |
| 292 | --- a/src/fields.c |
| 293 | +++ b/src/fields.c |
| 294 | @@ -110,16 +110,16 @@ void dispfield(p)register const struct field*p; |
| 295 | /* try and append one valid field to rdheader from stdin */ |
| 296 | int readhead P((void)) |
| 297 | { int idlen; |
| 298 | - getline(); |
| 299 | + get_line(); |
| 300 | if((idlen=breakfield(buf,buffilled))<=0) /* not the start of a valid field */ |
| 301 | return 0; |
| 302 | if(idlen==STRLEN(FROM)&&eqFrom_(buf)) /* it's a From_ line */ |
| 303 | { if(rdheader) |
| 304 | return 0; /* the From_ line was a fake! */ |
| 305 | - for(;buflast=='>';getline()); /* gather continued >From_ lines */ |
| 306 | + for(;buflast=='>';get_line()); /* gather continued >From_ lines */ |
| 307 | } |
| 308 | else |
| 309 | - for(;;getline()) /* get the rest of the continued field */ |
| 310 | + for(;;get_line()) /* get the rest of the continued field */ |
| 311 | { switch(buflast) /* will this line be continued? */ |
| 312 | { case ' ':case '\t': /* yep, it sure is */ |
| 313 | continue; |
| 314 | diff --git a/src/foldinfo.h b/src/foldinfo.h |
| 315 | index 9e4ebb6..797f9be 100644 |
| 316 | --- a/src/foldinfo.h |
| 317 | +++ b/src/foldinfo.h |
| 318 | @@ -10,7 +10,7 @@ |
| 319 | |
| 320 | #define ft_lock(type) ((type)>ft_MAILDIR) /* kernel lock fd */ |
| 321 | #define ft_atime(type) ((type)==ft_FILE) /* force atime < mtime */ |
| 322 | -#define ft_dotlock(type) ((type)==ft_FILE) /* dotlock $DEFAULT */ |
| 323 | +#define ft_dotlock(type) ((type)>ft_MAILDIR) /* dotlock $DEFAULT */ |
| 324 | #define ft_delim(type) ((type)==ft_FILE) /* add MMDF delim */ |
| 325 | #define ft_checkcloser(type) ((type)>ft_MH) |
| 326 | #define ft_forceblank(type) ((type)!=ft_MAILDIR) /* force blank line at end */ |
| 327 | diff --git a/src/formail.c b/src/formail.c |
| 328 | index fe5e6be..1f5c9dd 100644 |
| 329 | --- a/src/formail.c |
| 330 | +++ b/src/formail.c |
| 331 | @@ -758,9 +758,9 @@ startover: |
| 332 | lputssn(buf,buffilled),ctlength-=buffilled,buffilled=lnl=0; |
| 333 | ;{ int tbl=buflast,lwr='\n'; |
| 334 | while(--ctlength>=0&&tbl!=EOF) /* skip Content-Length: bytes */ |
| 335 | - lnl=lwr==tbl&&lwr=='\n',putcs(lwr=tbl),tbl=getchar(); |
| 336 | + lnl=lwr==tbl&&lwr=='\n',lputcs(lwr=tbl),tbl=getchar(); |
| 337 | if((buflast=tbl)=='\n'&&lwr!=tbl) /* just before a line break? */ |
| 338 | - putcs('\n'),buflast=getchar(); /* wrap up loose end */ |
| 339 | + lputcs('\n'),buflast=getchar(); /* wrap up loose end */ |
| 340 | } |
| 341 | if(!quiet&&ctlength>0) |
| 342 | { charNUM(num,ctlength); |
| 343 | @@ -819,7 +819,7 @@ splitit: { if(!lnl) /* did the previous mail end with an empty line? */ |
| 344 | { if(split) /* gobble up the next start separator */ |
| 345 | { buffilled=0; |
| 346 | #ifdef sMAILBOX_SEPARATOR |
| 347 | - getline();buffilled=0; /* but only if it's defined */ |
| 348 | + get_line();buffilled=0; /* but only if it's defined */ |
| 349 | #endif |
| 350 | if(buflast!=EOF) /* if any */ |
| 351 | goto splitit; |
| 352 | diff --git a/src/formisc.c b/src/formisc.c |
| 353 | index d6cab90..338733b 100644 |
| 354 | --- a/src/formisc.c |
| 355 | +++ b/src/formisc.c |
| 356 | @@ -115,7 +115,7 @@ void loadchar(c)const int c; /* append one character to buf */ |
| 357 | buf[buffilled++]=c; |
| 358 | } |
| 359 | |
| 360 | -int getline P((void)) /* read a newline-terminated line */ |
| 361 | +int get_line P((void)) /* read a newline-terminated line */ |
| 362 | { if(buflast==EOF) /* at the end of our Latin already? */ |
| 363 | { loadchar('\n'); /* fake empty line */ |
| 364 | return EOF; /* spread the word */ |
| 365 | diff --git a/src/formisc.h b/src/formisc.h |
| 366 | index 1c4ca20..f25211c 100644 |
| 367 | --- a/src/formisc.h |
| 368 | +++ b/src/formisc.h |
| 369 | @@ -17,4 +17,4 @@ void |
| 370 | char* |
| 371 | skipwords P((char*start)); |
| 372 | int |
| 373 | - getline P((void)); |
| 374 | + get_line P((void)); |
| 375 | diff --git a/src/mailfold.c b/src/mailfold.c |
| 376 | index 917b502..6c8bcf4 100644 |
| 377 | --- a/src/mailfold.c |
| 378 | +++ b/src/mailfold.c |
| 379 | @@ -30,6 +30,7 @@ static /*const*/char rcsid[]= |
| 380 | |
| 381 | int logopened,rawnonl; |
| 382 | off_t lasttell; |
| 383 | +static int trunced; |
| 384 | static long lastdump; |
| 385 | static volatile int mailread; /* if the mail is completely read in already */ |
| 386 | static struct dyna_array confield; /* escapes, concatenations */ |
| 387 | @@ -81,6 +82,7 @@ long dump(s,type,source,len)const int s,type;const char*source; |
| 388 | long len; |
| 389 | { int i;long part; |
| 390 | lasttell=i= -1;SETerrno(EBADF); |
| 391 | + trunced=0; |
| 392 | if(s>=0) |
| 393 | { if(ft_lock(type)&&(lseek(s,(off_t)0,SEEK_END),fdlock(s))) |
| 394 | nlog("Kernel-lock failed\n"); |
| 395 | @@ -120,13 +122,18 @@ jin: while(part&&(i=rwrite(s,source,BLKSIZ<part?BLKSIZ:(int)part))) |
| 396 | } |
| 397 | writefin: |
| 398 | i=type!=ft_PIPE&&fsync(s)&&errno!=EINVAL; /* EINVAL => wasn't a file */ |
| 399 | + if ((i||len)&&lasttell>=0) |
| 400 | + { int serrno=errno; |
| 401 | + if(!ftruncate(s,lasttell)) trunced=1; |
| 402 | + SETerrno(serrno); |
| 403 | + } |
| 404 | if(ft_lock(type)) |
| 405 | { int serrno=errno; /* save any error information */ |
| 406 | if(fdunlock()) |
| 407 | nlog("Kernel-unlock failed\n"); |
| 408 | SETerrno(serrno); |
| 409 | } |
| 410 | - i=rclose(s)||i; |
| 411 | + i=rclose(s)||i; /* if this fails, we should truncate, but it's too late */ |
| 412 | } /* return an error even if nothing was to be sent */ |
| 413 | return i&&!len?-1:len; |
| 414 | } |
| 415 | @@ -237,7 +244,7 @@ dumpf: { switch(errno) |
| 416 | #endif |
| 417 | default:writeerr(buf); |
| 418 | } |
| 419 | - if(lasttell>=0&&!truncate(boxname,lasttell)&&(logopened||verbose)) |
| 420 | + if(lasttell>=0&&trunced&&(logopened||verbose)) |
| 421 | nlog("Truncated file to former size\n"); /* undo garbage */ |
| 422 | ret0: return 0; |
| 423 | } |
| 424 | @@ -378,7 +385,8 @@ void readmail(rhead,tobesent)const long tobesent; |
| 425 | dfilled=mailread=0; |
| 426 | else if(rhead) /* only read in a new header */ |
| 427 | { memblk new; |
| 428 | - dfilled=mailread=0;makeblock(&new,0);readdyn(&new,&dfilled,0); |
| 429 | + dfilled=mailread=0;makeblock(&new,0); |
| 430 | + readdyn(&new,&dfilled,thebody-themail.p); |
| 431 | if(tobesent>dfilled&&isprivate) /* put it in place here */ |
| 432 | { tmemmove(themail.p+dfilled,thebody,filled-=tobesent); |
| 433 | tmemmove(themail.p,new.p,dfilled); |
| 434 | diff --git a/src/manconf.c b/src/manconf.c |
| 435 | index a9e9f1c..5c8ec36 100644 |
| 436 | --- a/src/manconf.c |
| 437 | +++ b/src/manconf.c |
| 438 | @@ -233,7 +233,7 @@ a security violation was found (e.g. \1.B \2-@PRESERVOPT@\1or variable\ |
| 439 | \2-@PRESERVOPT@\1and\1.BR \2-@FROMWHOPT@ .\1"); |
| 440 | pc("LMTPOPT",LMTPOPT); |
| 441 | #else |
| 442 | - ps("LMTPOPTdesc","");ps("LMTPusage",""); |
| 443 | + ps("LMTPOPTdesc","");ps("LMTPusage","\1"); |
| 444 | #endif |
| 445 | pname("INIT_UMASK",0);printf("0%lo/g\n",(unsigned long)INIT_UMASK);lines--; |
| 446 | pn("DEFlinebuf",DEFlinebuf); |
| 447 | diff --git a/src/memblk.c b/src/memblk.c |
| 448 | index e2f13f0..97e02d3 100644 |
| 449 | --- a/src/memblk.c |
| 450 | +++ b/src/memblk.c |
| 451 | @@ -51,11 +51,11 @@ void lockblock(mb)memblk*const mb; |
| 452 | { |
| 453 | #ifdef USE_MMAP |
| 454 | if(mb->fd>=0) |
| 455 | - { long len=mb->len+1; |
| 456 | - if(munmap(mb->p,len)) |
| 457 | - mmapfailed(len); /* don't want to continue here */ |
| 458 | - if((mb->p=mmap(0,len,PROT_READ,MAP_PRIVATE,mb->fd,(off_t)0))==MAP_FAILED) |
| 459 | - mmapfailed(len); |
| 460 | + { long mlen=mb->len+1; |
| 461 | + if(munmap(mb->p,mlen)) |
| 462 | + mmapfailed(mlen); /* don't want to continue here */ |
| 463 | + if((mb->p=mmap(0,mlen,PROT_READ,MAP_PRIVATE,mb->fd,(off_t)0))==MAP_FAILED) |
| 464 | + mmapfailed(mlen); |
| 465 | close(mb->fd); |
| 466 | mb->fd=ropen(devnull,O_RDWR,0); /* XXX Perhaps -1 is better? */ |
| 467 | } |
| 468 | @@ -77,8 +77,8 @@ int resizeblock(mb,len,nonfatal)memblk*const mb;const long len; |
| 469 | strcpy(filename,MMAP_DIR); |
| 470 | if(unique(filename,strchr(filename,'\0'),MMAP_FILE_LEN,MMAP_PERM,0,0)&& |
| 471 | (mb->fd=ropen(filename,O_RDWR,MMAP_PERM),unlink(filename),mb->fd>=0)) |
| 472 | - { mb->filelen=len; |
| 473 | - if(lseek(mb->fd,mb->filelen-1,SEEK_SET)<0||1!=rwrite(mb->fd,empty,1)) |
| 474 | + { mb->filelen=len+1; |
| 475 | + if(lseek(mb->fd,len,SEEK_SET)<0||1!=rwrite(mb->fd,empty,1)) |
| 476 | dropf: { close(mb->fd);mb->fd= -1; |
| 477 | if(verbose)nlog("Unable to extend or use tempfile"); |
| 478 | } |
| 479 | @@ -98,9 +98,9 @@ dropf: { close(mb->fd);mb->fd= -1; |
| 480 | } |
| 481 | } |
| 482 | if(mb->fd>=0) |
| 483 | - { if(len>mb->filelen) /* need to extend? */ |
| 484 | - { mb->filelen=len; |
| 485 | - if(lseek(mb->fd,mb->filelen-1,SEEK_SET)<0||1!=rwrite(mb->fd,empty,1)) |
| 486 | + { if(len>=mb->filelen) /* need to extend? */ |
| 487 | + { mb->filelen=len+1; |
| 488 | + if(lseek(mb->fd,len,SEEK_SET)<0||1!=rwrite(mb->fd,empty,1)) |
| 489 | { char*p=malloc(len+1); /* can't extend, switch to malloc */ |
| 490 | tmemmove(p,mb->p,mb->len); |
| 491 | munmap(mb->p,mb->len+1); |
| 492 | @@ -124,9 +124,9 @@ mmap: if((mb->p=mmap(0,len+1,P_RW,MAP_SHARED,mb->fd,(off_t)0))==MAP_FAILED) |
| 493 | } |
| 494 | else |
| 495 | mb->p=realloc(mb->p,len+1); |
| 496 | - mb->len=len+1; |
| 497 | - mb->p[len]='\0'; |
| 498 | + mb->len=len; |
| 499 | ret1: |
| 500 | + mb->p[len]='\0'; |
| 501 | return 1; |
| 502 | } |
| 503 | |
| 504 | diff --git a/src/memblk.h b/src/memblk.h |
| 505 | index 6fd1d1d..b57f369 100644 |
| 506 | --- a/src/memblk.h |
| 507 | +++ b/src/memblk.h |
| 508 | @@ -1,6 +1,6 @@ |
| 509 | typedef struct memblk { |
| 510 | char*p; /* where it starts */ |
| 511 | - long len; /* currently allocated size */ |
| 512 | + long len; /* current size, not including trailing NUL */ |
| 513 | #ifdef USE_MMAP |
| 514 | off_t filelen; /* how long is the file */ |
| 515 | int fd; /* file which is mmap()ed */ |
| 516 | diff --git a/src/network.h b/src/network.h |
| 517 | index d7d08f2..b09b6c4 100644 |
| 518 | --- a/src/network.h |
| 519 | +++ b/src/network.h |
| 520 | @@ -1,19 +1,13 @@ |
| 521 | /*$Id: network.h,v 1.7 1997/04/02 03:15:41 srb Exp $*/ |
| 522 | |
| 523 | -#include <sys/socket.h> /* socket() sendto() AF_INET |
| 524 | +#include <sys/socket.h> /* socket() sendto() */ |
| 525 | /* SOCK_DGRAM */ |
| 526 | -#include <netdb.h> /* gethostbyname() getservbyname() |
| 527 | - /* getprotobyname() */ |
| 528 | -#include <netinet/in.h> /* htons() struct sockaddr_in */ |
| 529 | +#include <netdb.h> /* getaddrinfo() */ |
| 530 | |
| 531 | #ifndef BIFF_serviceport |
| 532 | #define BIFF_serviceport COMSATservice |
| 533 | #endif |
| 534 | |
| 535 | -#ifndef h_0addr_list |
| 536 | -#define h_0addr_list h_addr_list[0] /* POSIX struct member */ |
| 537 | -#endif |
| 538 | - |
| 539 | #ifndef NO_const /* since network.h is outside the autoconf const check */ |
| 540 | #ifdef const /* loop, we need this backcheck for some systems */ |
| 541 | #undef const |
| 542 | diff --git a/src/pipes.c b/src/pipes.c |
| 543 | index 1fdb9e6..7754300 100644 |
| 544 | --- a/src/pipes.c |
| 545 | +++ b/src/pipes.c |
| 546 | @@ -145,7 +145,9 @@ int pipthrough(line,source,len)char*line,*source;const long len; |
| 547 | if(Stdout) |
| 548 | { *(eq=strchr(Stdout,'\0')-1)='\0'; /* chop the '=' */ |
| 549 | if(!(backblock=getenv(Stdout))) /* no current value? */ |
| 550 | - PRDB=PWRB= -1; |
| 551 | + { PRDB=PWRB= -1; |
| 552 | + backlen=0; |
| 553 | + } |
| 554 | else |
| 555 | { backlen=strlen(backblock); |
| 556 | goto pip; |
| 557 | @@ -155,9 +157,7 @@ int pipthrough(line,source,len)char*line,*source;const long len; |
| 558 | pip: rpipe(pbackfd); |
| 559 | rpipe(pinfd); /* main pipes setup */ |
| 560 | if(!(pidchild=sfork())) /* create a sending procmail */ |
| 561 | - { if(Stdout&&backblock) |
| 562 | - backlen=strlen(backblock); |
| 563 | - else |
| 564 | + { if(!Stdout) |
| 565 | backblock=source,backlen=len; |
| 566 | childsetup();rclose(PRDI);rclose(PRDB); |
| 567 | rpipe(poutfd);rclose(STDOUT); |
| 568 | @@ -194,7 +194,7 @@ perr: progerr(line,excode,pwait==4); /* I'm going to tell my mommy! */ |
| 569 | makeblock(&temp,Stdfilled); |
| 570 | tmemmove(temp.p,Stdout,Stdfilled); |
| 571 | readdyn(&temp,&Stdfilled,Stdfilled+backlen+1); |
| 572 | - Stdout=realloc(Stdout,&Stdfilled+1); |
| 573 | + Stdout=realloc(Stdout,Stdfilled+1); |
| 574 | tmemmove(Stdout,temp.p,Stdfilled+1); |
| 575 | freeblock(&temp); |
| 576 | retStdout(Stdout,pwait&&pipw,!backblock); |
| 577 | diff --git a/src/procmail.c b/src/procmail.c |
| 578 | index 4a232f2..2bb449b 100644 |
| 579 | --- a/src/procmail.c |
| 580 | +++ b/src/procmail.c |
| 581 | @@ -652,8 +652,7 @@ commint:do skipspace(); /* skip whitespace */ |
| 582 | nrcond= -1; |
| 583 | if(tolock) /* clear temporary buffer for lockfile name */ |
| 584 | free(tolock); |
| 585 | - for(i=maxindex(flags);i;i--) /* clear the flags */ |
| 586 | - flags[i]=0; |
| 587 | + bbzero(flags,sizeof(flags)); /* clear the flags */ |
| 588 | for(tolock=0,locknext=0;;) |
| 589 | { chp=skpspace(chp); |
| 590 | switch(i= *chp++) |
| 591 | diff --git a/src/recommend.c b/src/recommend.c |
| 592 | index 5d41e01..9002268 100644 |
| 593 | --- a/src/recommend.c |
| 594 | +++ b/src/recommend.c |
| 595 | @@ -47,7 +47,7 @@ int main(argc,argv)const int argc;const char*const argv[]; |
| 596 | printf("chmod %lo %s\n",(unsigned long)(sgid|PERMIS),argv[2]); |
| 597 | else if(chmdir==1) |
| 598 | goto nogchmod; |
| 599 | - if(chmdir) |
| 600 | + if(0) |
| 601 | printf("chmod %c+w %s/.\n",chmdir==1?'g':'a',mailspooldir); |
| 602 | nogchmod: |
| 603 | return EXIT_SUCCESS; |
| 604 | -- |
| 605 | 1.8.4.2 |
| 606 | |