|
|
1.1 ! root 1: /* DELPHOTO.C */ ! 2: ! 3: /* Developed 1990-1997 by Rob Swindell; PO Box 501, Yorba Linda, CA 92885 */ ! 4: ! 5: #include <io.h> ! 6: #include <dos.h> ! 7: #include <dir.h> ! 8: #include <bios.h> ! 9: #include <time.h> ! 10: #include <ctype.h> ! 11: #include <stdio.h> ! 12: #include <share.h> ! 13: #include <conio.h> ! 14: #include <errno.h> ! 15: #include <fcntl.h> ! 16: #include <string.h> ! 17: #include <stdlib.h> ! 18: #include <stdarg.h> ! 19: #include <malloc.h> ! 20: #include <sys/stat.h> ! 21: #include <sys/types.h> ! 22: ! 23: #include "gen_defs.h" ! 24: #include "crc32.h" ! 25: #include "smmdefs.h" ! 26: ! 27: extern int daylight=0; ! 28: extern long timezone=0L; ! 29: ! 30: ! 31: ! 32: char *base41(unsigned int i, char *str) ! 33: { ! 34: char c; ! 35: unsigned int j=41*41,k; ! 36: ! 37: for(c=0;c<3;c++) { ! 38: k=i/j; ! 39: str[c]='0'+k; ! 40: i-=(k*j); ! 41: j/=41; ! 42: if(str[c]>=':') ! 43: str[c]='A'+(str[c]-':'); ! 44: if(str[c]>='[') ! 45: str[c]='#'+(str[c]-'['); } ! 46: str[c]=0; ! 47: return(str); ! 48: } ! 49: ! 50: /****************************************************************************/ ! 51: /* Updates 16-bit "rcrc" with character 'ch' */ ! 52: /****************************************************************************/ ! 53: void ucrc16(uchar ch, ushort *rcrc) { ! 54: ushort i, cy; ! 55: uchar nch=ch; ! 56: ! 57: for (i=0; i<8; i++) { ! 58: cy=*rcrc & 0x8000; ! 59: *rcrc<<=1; ! 60: if (nch & 0x80) *rcrc |= 1; ! 61: nch<<=1; ! 62: if (cy) *rcrc ^= 0x1021; } ! 63: } ! 64: ! 65: /****************************************************************************/ ! 66: /* Returns 16-crc of string (not counting terminating NULL) */ ! 67: /****************************************************************************/ ! 68: ushort crc16(char *str) ! 69: { ! 70: int i=0; ! 71: ushort crc=0; ! 72: ! 73: ucrc16(0,&crc); ! 74: while(str[i]) ! 75: ucrc16(str[i++],&crc); ! 76: ucrc16(0,&crc); ! 77: ucrc16(0,&crc); ! 78: return(crc); ! 79: } ! 80: ! 81: /****************************************************************************/ ! 82: /* Returns 32-crc of string (not counting terminating NULL) */ ! 83: /****************************************************************************/ ! 84: ulong crc32(char *str) ! 85: { ! 86: int i=0; ! 87: ulong crc=0xffffffffUL; ! 88: ! 89: while(str[i]) ! 90: crc=ucrc32(str[i++],crc); ! 91: crc=~crc; ! 92: return(crc); ! 93: } ! 94: ! 95: time_t checktime() ! 96: { ! 97: struct tm tm; ! 98: ! 99: memset(&tm,0,sizeof(tm)); ! 100: tm.tm_year=94; ! 101: tm.tm_mday=1; ! 102: return(mktime(&tm)^0x2D24BD00L); ! 103: } ! 104: ! 105: ! 106: int main(int argc, char **argv) ! 107: { ! 108: char str[128],fname[128],path[128],tmp[128]; ! 109: int i,file; ! 110: FILE *index, *stream; ! 111: ulong number,crc; ! 112: user_t user; ! 113: ixb_t ixb; ! 114: struct ffblk ff; ! 115: ! 116: printf("\nDELPHOTO v1.00 - Synchronet Match Maker Photograph Deletion\n\n"); ! 117: ! 118: if(checktime()) { ! 119: printf("Time problem!\n"); ! 120: exit(1); } ! 121: ! 122: if(argc<3) { ! 123: printf("usage: delphoto user_number system_name\n"); ! 124: exit(1); } ! 125: ! 126: if((file=open("SMM.DAB",O_RDWR|O_BINARY|SH_DENYNO|O_CREAT ! 127: ,S_IWRITE|S_IREAD))==-1) { ! 128: printf("\n\7Error opening/creating SMM.DAB\n"); ! 129: exit(1); } ! 130: if((stream=fdopen(file,"w+b"))==NULL) { ! 131: printf("\n\7Error converting SMM.DAB file handle to stream\n"); ! 132: exit(1); } ! 133: setvbuf(stream,0L,_IOFBF,4096); ! 134: ! 135: if((file=open("SMM.IXB",O_RDWR|O_BINARY|SH_DENYNO|O_CREAT ! 136: ,S_IWRITE|S_IREAD))==-1) { ! 137: printf("\n\7Error opening/creating SMM.IXB\n"); ! 138: exit(1); } ! 139: if((index=fdopen(file,"w+b"))==NULL) { ! 140: printf("\n\7Error converting SMM.IXB file handle to stream\n"); ! 141: exit(1); } ! 142: setvbuf(stream,0L,_IOFBF,1024); ! 143: ! 144: number=atol(argv[1]); ! 145: str[0]=0; ! 146: for(i=2;i<argc;i++) { ! 147: if(str[0]) ! 148: strcat(str," "); ! 149: strcat(str,argv[i]); } ! 150: ! 151: strupr(str); ! 152: str[25]=0; ! 153: ! 154: crc=crc32(str); ! 155: rewind(index); ! 156: i=0; ! 157: while(!feof(index)) { ! 158: if(!fread(&ixb,sizeof(ixb_t),1,index)) ! 159: break; ! 160: if(!ixb.number) /* DELETED */ ! 161: continue; ! 162: if(ixb.system!=crc || ixb.number!=number) ! 163: continue; ! 164: fseek(stream ! 165: ,((ftell(index)-sizeof(ixb_t))/sizeof(ixb_t)) ! 166: *sizeof(user_t),SEEK_SET); ! 167: if(!fread(&user,sizeof(user_t),1,stream)) ! 168: continue; ! 169: i=1; ! 170: break; } ! 171: if(!i) { ! 172: printf("\7User #%lu @ %s not found!\n",number,str); ! 173: exit(2); } ! 174: ! 175: if(!(user.misc&USER_PHOTO)) { ! 176: printf("\7User #%lu @ %s doesn't have a photo attached to their profile.\n" ! 177: ,number,str); ! 178: exit(3); } ! 179: ! 180: for(i=0;user.system[i];i++) ! 181: if(isalnum(user.system[i])) ! 182: break; ! 183: if(!user.system[i]) ! 184: fname[0]='~'; ! 185: else ! 186: fname[0]=user.system[i]; ! 187: for(i=strlen(user.system)-1;i>0;i--) ! 188: if(isalnum(user.system[i])) ! 189: break; ! 190: if(i<=0) ! 191: fname[1]='~'; ! 192: else ! 193: fname[1]=user.system[i]; ! 194: fname[2]=0; ! 195: strupr(user.system); ! 196: strcat(fname,base41(crc16(user.system),tmp)); ! 197: strcat(fname,base41(user.number,tmp)); ! 198: strcat(fname,".*"); ! 199: strupr(fname); ! 200: sprintf(path,"PHOTO\\%s",fname); ! 201: i=findfirst(path,&ff,0); ! 202: if(i) ! 203: printf("\7%s doesn't exist!\n",path); ! 204: else { ! 205: sprintf(path,"PHOTO\\%s",ff.ff_name); ! 206: if(remove(path)) ! 207: printf("\7%s couldn't be removed!\n",path); } ! 208: ! 209: user.misc&=~USER_PHOTO; ! 210: user.updated=time(NULL); ! 211: user.photo=0; ! 212: fseek(stream ! 213: ,((ftell(index)-sizeof(ixb_t))/sizeof(ixb_t)) ! 214: *sizeof(user_t),SEEK_SET); ! 215: fwrite(&user,sizeof(user_t),1,stream); ! 216: ixb.updated=user.updated; ! 217: fseek(index,ftell(index)-sizeof(ixb_t),SEEK_SET); ! 218: fwrite(&ixb,sizeof(ixb_t),1,index); ! 219: ! 220: printf("Photo removed successfully from database.\n"); ! 221: return(0); ! 222: } ! 223:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.