Changeset 1682
- Timestamp:
- 02/25/10 10:56:54 (14 years ago)
- Location:
- trunk
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/globals.h
r1658 r1682 749 749 extern void cs_setpriority(int); 750 750 extern struct s_auth *find_user(char *); 751 extern void long2bitchar(long value, char *result); 752 extern void clear_sip(struct s_ip **sip); 753 extern void clear_ptab(struct s_ptab *ptab); 754 void clear_caidtab(struct s_caidtab *ctab); 755 void clear_tuntab(struct s_tuntab *ttab); 756 extern void cs_strncpy(char * destination, const char * source, size_t num); 751 757 752 758 // oscam variables -
trunk/oscam-config.c
r1674 r1682 3 3 # include "oscam-boxkeys.np" 4 4 #endif 5 6 #define CONFVARWIDTH 20 5 7 6 8 static char *cs_conf="oscam.conf"; … … 20 22 typedef enum cs_proto_type 21 23 { 22 TAG_GLOBAL,// must be first !23 TAG_MONITOR,// monitor24 TAG_CAMD33,// camd 3.3x25 TAG_CAMD35,// camd 3.5x UDP26 TAG_NEWCAMD,// newcamd27 TAG_RADEGAST,// radegast28 TAG_SERIAL,// serial (static)29 TAG_CS357X,// camd 3.5x UDP30 TAG_CS378X,// camd 3.5x TCP31 #ifdef CS_WITH_GBOX 32 TAG_GBOX,// gbox33 #endif 34 TAG_CCCAM,// cccam35 24 TAG_GLOBAL, // must be first ! 25 TAG_MONITOR, // monitor 26 TAG_CAMD33, // camd 3.3x 27 TAG_CAMD35, // camd 3.5x UDP 28 TAG_NEWCAMD, // newcamd 29 TAG_RADEGAST, // radegast 30 TAG_SERIAL, // serial (static) 31 TAG_CS357X, // camd 3.5x UDP 32 TAG_CS378X, // camd 3.5x TCP 33 #ifdef CS_WITH_GBOX 34 TAG_GBOX, // gbox 35 #endif 36 TAG_CCCAM, // cccam 37 TAG_DVBAPI 36 38 #ifdef CS_ANTICASC 37 ,TAG_ANTICASC// anti-cascading39 ,TAG_ANTICASC // anti-cascading 38 40 #endif 39 41 } cs_proto_type_t; 40 42 41 static char *cctag[]={"global", "monitor", "camd33", "camd35", 42 43 #ifdef CS_WITH_GBOX 43 static char *cctag[]={"global", "monitor", "camd33", "camd35", 44 "newcamd", "radegast", "serial", "cs357x", "cs378x", 45 #ifdef CS_WITH_GBOX 44 46 "gbox", 45 47 #endif 46 48 "cccam", "dvbapi", 47 49 #ifdef CS_ANTICASC 48 50 "anticasc", 49 51 #endif 50 52 NULL}; 51 53 52 54 #ifdef DEBUG_SIDTAB … … 76 78 void chk_iprange(char *value, struct s_ip **base) 77 79 { 78 int i = 0; 79 char *ptr1, *ptr2; 80 struct s_ip *lip, *cip; 81 82 for (cip=lip=*base; cip; cip=cip->next) 83 lip=cip; 84 if (!(cip=malloc(sizeof(struct s_ip)))) 85 { 86 fprintf(stderr, "Error allocating memory (errno=%d)\n", errno); 87 exit(1); 88 } 89 if (*base) 90 lip->next=cip; 91 else 92 *base=cip; 93 94 memset(cip, 0, sizeof(struct s_ip)); 95 for (ptr1=strtok(value, ","); ptr1; ptr1=strtok(NULL, ",")) 96 { 97 if (i == 0) ++i; 98 else { 99 if (!(cip=malloc(sizeof(struct s_ip)))){ 100 fprintf(stderr, "Error allocating memory (errno=%d)\n", errno); 101 exit(1); 102 } 103 lip->next = cip; 104 memset(cip, 0, sizeof(struct s_ip)); 105 } 106 if( (ptr2=strchr(trim(ptr1), '-')) ) 107 { 108 *ptr2++='\0'; 109 cip->ip[0]=cs_inet_addr(trim(ptr1)); 110 cip->ip[1]=cs_inet_addr(trim(ptr2)); 111 } 112 else 113 cip->ip[0]=cip->ip[1]=cs_inet_addr(ptr1); 114 lip = cip; 115 } 80 int i = 0; 81 char *ptr1, *ptr2; 82 struct s_ip *lip, *cip; 83 84 for (cip=lip=*base; cip; cip=cip->next) 85 lip = cip; 86 if (!(cip=malloc(sizeof(struct s_ip)))) { 87 fprintf(stderr, "Error allocating memory (errno=%d)\n", errno); 88 exit(1); 89 } 90 if (*base) 91 lip->next = cip; 92 else 93 *base = cip; 94 95 memset(cip, 0, sizeof(struct s_ip)); 96 for (ptr1=strtok(value, ","); ptr1; ptr1=strtok(NULL, ",")) { 97 if (i == 0) 98 ++i; 99 else { 100 if (!(cip=malloc(sizeof(struct s_ip)))) { 101 fprintf(stderr, "Error allocating memory (errno=%d)\n", errno); 102 exit(1); 103 } 104 lip->next = cip; 105 memset(cip, 0, sizeof(struct s_ip)); 106 } 107 108 if( (ptr2=strchr(trim(ptr1), '-')) ) { 109 *ptr2++ ='\0'; 110 cip->ip[0]=cs_inet_addr(trim(ptr1)); 111 cip->ip[1]=cs_inet_addr(trim(ptr2)); 112 } else { 113 cip->ip[0]=cip->ip[1]=cs_inet_addr(ptr1); 114 } 115 lip = cip; 116 } 116 117 } 117 118 118 119 void chk_caidtab(char *caidasc, CAIDTAB *ctab) 119 120 { 120 int i; 121 char *ptr1, *ptr2, *ptr3; 122 for (i=0, ptr1=strtok(caidasc, ","); (i<CS_MAXCAIDTAB) && (ptr1); ptr1=strtok(NULL, ",")) 123 { 124 ulong caid, mask, cmap; 125 if( (ptr3=strchr(trim(ptr1), ':')) ) 126 *ptr3++='\0'; 127 else 128 ptr3=""; 129 if( (ptr2=strchr(trim(ptr1), '&')) ) 130 *ptr2++='\0'; 131 else 132 ptr2=""; 133 if (((caid=a2i(ptr1, 2))|(mask=a2i(ptr2,-2))|(cmap=a2i(ptr3, 2))) < 0x10000) 134 { 135 ctab->caid[i]=caid; 136 ctab->mask[i]=mask; 137 ctab->cmap[i++]=cmap; 138 } 139 // else 140 // cs_log("WARNING: wrong CAID in %s -> ignored", cs_user); 141 } 121 int i; 122 char *ptr1, *ptr2, *ptr3; 123 124 for (i = 0, ptr1 = strtok(caidasc, ","); (i < CS_MAXCAIDTAB) && (ptr1); ptr1 = strtok(NULL, ",")) { 125 ulong caid, mask, cmap; 126 if( (ptr3 = strchr(trim(ptr1), ':')) ) 127 *ptr3++ = '\0'; 128 else 129 ptr3 = ""; 130 131 if( (ptr2 = strchr(trim(ptr1), '&')) ) 132 *ptr2++ = '\0'; 133 else 134 ptr2 = ""; 135 136 if (((caid = a2i(ptr1, 2)) | (mask = a2i(ptr2,-2)) | (cmap = a2i(ptr3, 2))) < 0x10000) { 137 ctab->caid[i] = caid; 138 ctab->mask[i] = mask; 139 ctab->cmap[i++] = cmap; 140 } 141 } 142 142 } 143 143 144 144 void chk_tuntab(char *tunasc, TUNTAB *ttab) 145 145 { 146 int i; 147 char *ptr1, *ptr2, *ptr3; 148 for (i=0, ptr1=strtok(tunasc, ","); (i<CS_MAXTUNTAB) && (ptr1); ptr1=strtok(NULL, ",")) 149 { 150 ulong bt_caidfrom, bt_caidto, bt_srvid; 151 if( (ptr3=strchr(trim(ptr1), ':')) ) 152 *ptr3++='\0'; 153 else 154 ptr3=""; 155 if( (ptr2=strchr(trim(ptr1), '.')) ) 156 *ptr2++='\0'; 157 else 158 ptr2=""; 159 if ((bt_caidfrom=a2i(ptr1, 2))|(bt_srvid=a2i(ptr2,-2))|(bt_caidto=a2i(ptr3, 2))) 160 { 161 ttab->bt_caidfrom[i]=bt_caidfrom; 162 ttab->bt_caidto[i]=bt_caidto; 163 ttab->bt_srvid[i++]=bt_srvid; 164 } 165 // else 166 // cs_log("WARNING: wrong Betatunnel in %s -> ignored", cs_user); 167 } 146 int i; 147 char *ptr1, *ptr2, *ptr3; 148 149 for (i = 0, ptr1 = strtok(tunasc, ","); (i < CS_MAXTUNTAB) && (ptr1); ptr1 = strtok(NULL, ",")) { 150 ulong bt_caidfrom, bt_caidto, bt_srvid; 151 if( (ptr3 = strchr(trim(ptr1), ':')) ) 152 *ptr3++ = '\0'; 153 else 154 ptr3 = ""; 155 156 if( (ptr2 = strchr(trim(ptr1), '.')) ) 157 *ptr2++ = '\0'; 158 else 159 ptr2 = ""; 160 161 if ((bt_caidfrom = a2i(ptr1, 2)) | (bt_srvid = a2i(ptr2,-2)) | (bt_caidto = a2i(ptr3, 2))) { 162 ttab->bt_caidfrom[i] = bt_caidfrom; 163 ttab->bt_caidto[i] = bt_caidto; 164 ttab->bt_srvid[i++] = bt_srvid; 165 } 166 } 168 167 } 169 168 170 169 void chk_services(char *labels, ulong *sidok, ulong *sidno) 171 170 { 172 173 174 175 *sidok=*sidno=0;176 for (ptr=strtok(labels, ","); ptr; ptr=strtok(NULL, ",")) 177 for (trim(ptr), i=0, sidtab=cfg->sidtab; sidtab; sidtab=sidtab->next, i++) 178 { 179 if (!strcmp(sidtab->label, ptr)) *sidok|=(1<<i);180 if ((ptr[0]=='!') && (!strcmp(sidtab->label, ptr+1))) *sidno|=(1<<i); 181 171 int i; 172 char *ptr; 173 SIDTAB *sidtab; 174 *sidok = *sidno = 0; 175 for (ptr=strtok(labels, ","); ptr; ptr=strtok(NULL, ",")) { 176 for (trim(ptr), i = 0, sidtab = cfg->sidtab; sidtab; sidtab = sidtab->next, i++) { 177 if (!strcmp(sidtab->label, ptr)) *sidok|=(1<<i); 178 if ((ptr[0]=='!') && (!strcmp(sidtab->label, ptr+1))) *sidno|=(1<<i); 179 } 180 } 182 181 } 183 182 184 183 void chk_ftab(char *zFilterAsc, FTAB *ftab, const char *zType, const char *zName, const char *zFiltName) 185 184 { 186 int i,j; 187 char *ptr1,*ptr2,*ptr3; 188 char *ptr[CS_MAXFILTERS] = {0}; 189 190 memset(ftab, 0, sizeof(FTAB)); 191 for( i=0, ptr1=strtok(zFilterAsc, ";"); (i<CS_MAXFILTERS) && (ptr1); ptr1=strtok(NULL, ";"), i++ ) 192 { 193 //cs_log("ptr1=%s", ptr1); 194 ptr[i] = ptr1; 195 if( (ptr2=strchr(trim(ptr1), ':')) ) 196 { 197 //cs_log("ptr2=%s", ptr2); 198 *ptr2++='\0'; 199 //cs_log("ptr2=%s", ptr2); 200 ftab->filts[i].caid = (ushort)a2i(ptr1, 4); 201 //cs_log("caid=%04X", ftab->filts[i].caid); 202 ptr[i] = ptr2; 203 } 204 else if (zFiltName && zFiltName[0]=='c') 205 { 206 cs_log("PANIC: CAID field not found in CHID parameter!"); 207 cs_exit(1); 208 } 209 ftab->nfilts++; 210 } 211 212 if( ftab->nfilts ) cs_debug("%s '%s' %s filter(s):", zType, zName, zFiltName); 213 for( i=0; i<ftab->nfilts; i++ ) 214 { 215 cs_debug("CAID #%d: %04X", i, ftab->filts[i].caid); 216 for( j=0, ptr3=strtok(ptr[i], ","); (j<CS_MAXPROV) && (ptr3); ptr3=strtok(NULL, ","), j++ ) 217 { 218 ftab->filts[i].prids[j] = a2i(ptr3,6); 219 ftab->filts[i].nprids++; 220 cs_debug("%s #%d: %06X", zFiltName, j, ftab->filts[i].prids[j]); 221 } 222 } 223 //cs_log("exit chk_ftab"); 185 int i, j; 186 char *ptr1, *ptr2, *ptr3; 187 char *ptr[CS_MAXFILTERS] = {0}; 188 189 memset(ftab, 0, sizeof(FTAB)); 190 for( i = 0, ptr1 = strtok(zFilterAsc, ";"); (i < CS_MAXFILTERS) && (ptr1); ptr1 = strtok(NULL, ";"), i++ ) { 191 ptr[i] = ptr1; 192 if( (ptr2 = strchr(trim(ptr1), ':')) ) { 193 *ptr2++ ='\0'; 194 ftab->filts[i].caid = (ushort)a2i(ptr1, 4); 195 ptr[i] = ptr2; 196 } 197 else if (zFiltName && zFiltName[0] == 'c') { 198 cs_log("PANIC: CAID field not found in CHID parameter!"); 199 cs_exit(1); 200 } 201 ftab->nfilts++; 202 } 203 204 if( ftab->nfilts ) cs_debug("%s '%s' %s filter(s):", zType, zName, zFiltName); 205 for( i = 0; i < ftab->nfilts; i++ ) { 206 cs_debug("CAID #%d: %04X", i, ftab->filts[i].caid); 207 for( j = 0, ptr3 = strtok(ptr[i], ","); (j < CS_MAXPROV) && (ptr3); ptr3 = strtok(NULL, ","), j++ ) { 208 ftab->filts[i].prids[j] = a2i(ptr3,6); 209 ftab->filts[i].nprids++; 210 cs_debug("%s #%d: %06X", zFiltName, j, ftab->filts[i].prids[j]); 211 } 212 } 224 213 } 225 214 226 215 void chk_cltab(char *classasc, CLASSTAB *clstab) 227 216 { 228 int i; 229 char *ptr1; 230 for( i=0, ptr1=strtok(classasc, ","); (i<CS_MAXCAIDTAB) && (ptr1); ptr1=strtok(NULL, ",") ) 231 { 232 ptr1=trim(ptr1); 233 if( ptr1[0] == '!' ) 234 clstab->bclass[clstab->bn++] = (uchar)a2i(ptr1+1, 2); 235 else 236 clstab->aclass[clstab->an++] = (uchar)a2i(ptr1, 2); 237 } 217 int i; 218 char *ptr1; 219 for( i = 0, ptr1 = strtok(classasc, ","); (i < CS_MAXCAIDTAB) && (ptr1); ptr1 = strtok(NULL, ",") ) { 220 ptr1 = trim(ptr1); 221 if( ptr1[0] == '!' ) 222 clstab->bclass[clstab->bn++] = (uchar)a2i(ptr1+1, 2); 223 else 224 clstab->aclass[clstab->an++] = (uchar)a2i(ptr1, 2); 225 } 238 226 } 239 227 240 228 void chk_port_tab(char *portasc, PTAB *ptab) 241 229 { 242 int i,j,nfilts,ifilt,iport; 243 char *ptr1,*ptr2,*ptr3; 244 char *ptr[CS_MAXPORTS] = {0}; 245 int port[CS_MAXPORTS] = {0}; 246 int previous_nports = ptab->nports; 247 248 for (nfilts=i=previous_nports, ptr1=strtok(portasc, ";"); (i<CS_MAXCAIDTAB) && (ptr1); ptr1=strtok(NULL, ";"), i++) 249 { 250 ptr[i] = ptr1; 251 if( (ptr2=strchr(trim(ptr1), '@')) ) 252 { 253 *ptr2++='\0'; 254 ptab->ports[i].s_port = atoi(ptr1); 255 ptr[i] = ptr2; 256 port[i] = ptab->ports[i].s_port; 257 ptab->nports++; 258 } 259 nfilts++; 260 } 261 262 if( nfilts==1 && strlen(portasc)<6 && ptab->ports[0].s_port == 0 ) { 263 ptab->ports[0].s_port = atoi(portasc); 264 ptab->nports = 1; 265 } 266 267 iport=ifilt = previous_nports; 268 for (i=previous_nports; i<nfilts; i++) 269 { 270 if( port[i]!=0 ) iport = i; 271 for (j=0, ptr3=strtok(ptr[i], ","); (j<CS_MAXPROV) && (ptr3); ptr3=strtok(NULL, ","), j++) 272 { 273 if( (ptr2=strchr(trim(ptr3), ':')) ) 274 { 275 *ptr2++='\0'; 276 ptab->ports[iport].ftab.nfilts++; 277 ifilt = ptab->ports[iport].ftab.nfilts-1; 278 ptab->ports[iport].ftab.filts[ifilt].caid = (ushort)a2i(ptr3, 4); 279 ptab->ports[iport].ftab.filts[ifilt].prids[j] = a2i(ptr2, 6); 280 } else { 281 ptab->ports[iport].ftab.filts[ifilt].prids[j] = a2i(ptr3, 6); 282 } 283 ptab->ports[iport].ftab.filts[ifilt].nprids++; 284 } 285 } 286 } 287 288 #ifdef NOTUSED 289 static void chk_srvip(char *value, in_addr_t *ip) 290 { 291 int i; 292 char *ptr; 293 for (i=0, ptr=strtok(value, ","); ptr; ptr=strtok(NULL, ",")) 294 if (i<8) ip[i++]=inet_addr(ptr); 295 } 296 #endif 230 int i, j, nfilts, ifilt, iport; 231 char *ptr1, *ptr2, *ptr3; 232 char *ptr[CS_MAXPORTS] = {0}; 233 int port[CS_MAXPORTS] = {0}; 234 int previous_nports = ptab->nports; 235 236 for (nfilts = i = previous_nports, ptr1 = strtok(portasc, ";"); (i < CS_MAXCAIDTAB) && (ptr1); ptr1 = strtok(NULL, ";"), i++) { 237 ptr[i] = ptr1; 238 if( (ptr2=strchr(trim(ptr1), '@')) ) { 239 *ptr2++ ='\0'; 240 ptab->ports[i].s_port = atoi(ptr1); 241 ptr[i] = ptr2; 242 port[i] = ptab->ports[i].s_port; 243 ptab->nports++; 244 } 245 nfilts++; 246 } 247 248 if( nfilts == 1 && strlen(portasc) < 6 && ptab->ports[0].s_port == 0 ) { 249 ptab->ports[0].s_port = atoi(portasc); 250 ptab->nports = 1; 251 } 252 253 iport = ifilt = previous_nports; 254 for (i=previous_nports; i<nfilts; i++) { 255 if( port[i] != 0 ) 256 iport = i; 257 for (j = 0, ptr3 = strtok(ptr[i], ","); (j < CS_MAXPROV) && (ptr3); ptr3 = strtok(NULL, ","), j++) { 258 if( (ptr2=strchr(trim(ptr3), ':')) ) { 259 *ptr2++='\0'; 260 ptab->ports[iport].ftab.nfilts++; 261 ifilt = ptab->ports[iport].ftab.nfilts-1; 262 ptab->ports[iport].ftab.filts[ifilt].caid = (ushort)a2i(ptr3, 4); 263 ptab->ports[iport].ftab.filts[ifilt].prids[j] = a2i(ptr2, 6); 264 } else { 265 ptab->ports[iport].ftab.filts[ifilt].prids[j] = a2i(ptr3, 6); 266 } 267 ptab->ports[iport].ftab.filts[ifilt].nprids++; 268 } 269 } 270 } 297 271 298 272 void chk_t_global(char *token, char *value) 299 273 { 300 if (!strcmp(token, "serverip")) { cfg->srvip=inet_addr(value); return; } 301 if (!strcmp(token, "logfile")) { 302 if (cfg->logfile != NULL) { 303 free(cfg->logfile); 304 cfg->logfile = NULL; 305 } 306 if (value[0]) 307 asprintf(&(cfg->logfile), "%s", value); 308 return; 309 } 310 if (!strcmp(token, "pidfile")) { 311 if (cfg->pidfile != NULL) { 312 free(cfg->pidfile); 313 cfg->pidfile = NULL; 314 } 315 if (value[0]) 316 asprintf(&(cfg->pidfile), "%s", value); 317 return; 318 } 319 if (!strcmp(token, "usrfile")) { 320 if (cfg->usrfile != NULL) { 321 free(cfg->usrfile); 322 cfg->usrfile = NULL; 323 } 324 if (value[0]) 325 asprintf(&(cfg->usrfile), "%s", value); 326 return; 327 } 328 if (!strcmp(token, "cwlogdir")) { 329 if (cfg->cwlogdir != NULL) { 330 free(cfg->cwlogdir); 331 cfg->cwlogdir = NULL; 332 } 333 if (value[0]) 334 asprintf(&(cfg->cwlogdir), "%s", value); 335 return; 336 } 337 if (!strcmp(token, "clienttimeout")) 338 { 339 cfg->ctimeout = atoi(value); 340 if (cfg->ctimeout < 100) 341 cfg->ctimeout *= 1000; 342 return; 343 } 344 if (!strcmp(token, "fallbacktimeout")) 345 { 346 cfg->ftimeout = atoi(value); 347 if (cfg->ftimeout < 100) 348 cfg->ftimeout *= 1000; 349 return; 350 } 351 352 if (!strcmp(token, "clientmaxidle")) { cfg->cmaxidle=atoi(value); return; } 353 if (!strcmp(token, "cachedelay")) { cfg->delay=atoi(value); return; } 354 if (!strcmp(token, "bindwait")) { cfg->bindwait=atoi(value); return; } 355 if (!strcmp(token, "netprio")) { cfg->netprio=atoi(value); return; } 356 if (!strcmp(token, "resolvedelay")) { cfg->resolvedelay=atoi(value); return; } 357 if (!strcmp(token, "sleep")) { cfg->tosleep=atoi(value); return; } 358 if (!strcmp(token, "unlockparental")) { cfg->ulparent=atoi(value); return; } 359 if (!strcmp(token, "nice")) 360 { 361 cfg->nice=atoi(value); 362 if ((cfg->nice<-20) || (cfg->nice>20)) cfg->nice=99; 363 if (cfg->nice!=99) cs_setpriority(cfg->nice); // ignore errors 364 return; 365 } 366 if (!strcmp(token, "serialreadertimeout")) 367 { 368 if (cfg->srtimeout < 100) 369 cfg->srtimeout = atoi(value) * 1000; 370 else 371 cfg->srtimeout = atoi(value); 372 if( cfg->srtimeout <=0 ) 373 cfg->srtimeout=1500; 374 return; 375 } 376 if (!strcmp(token, "maxlogsize")) 377 { 378 cfg->max_log_size=atoi(value); 379 if( cfg->max_log_size <=10 ) 380 cfg->max_log_size=10; 381 return; 382 } 383 if( !strcmp(token, "waitforcards")) { cfg->waitforcards = atoi(value); return; } 384 if( !strcmp(token, "preferlocalcards")) { cfg->preferlocalcards = atoi(value); return; } 385 if (token[0] != '#') 386 fprintf(stderr, "Warning: keyword '%s' in global section not recognized\n",token); 274 if (!strcmp(token, "serverip")) { 275 if (strlen(value) == 0) { 276 cfg->srvip = 0; 277 return; 278 } else { 279 cfg->srvip=inet_addr(value); 280 return; 281 } 282 } 283 284 if (!strcmp(token, "logfile")) { 285 if (cfg->logfile != NULL) { 286 free(cfg->logfile); 287 cfg->logfile = NULL; 288 } 289 if (strlen(value) > 0) 290 asprintf(&(cfg->logfile), "%s", value); 291 return; 292 } 293 294 if (!strcmp(token, "pidfile")) { 295 if (cfg->pidfile != NULL) { 296 free(cfg->pidfile); 297 cfg->pidfile = NULL; 298 } 299 if (strlen(value) > 0) 300 asprintf(&(cfg->pidfile), "%s", value); 301 return; 302 } 303 304 if (!strcmp(token, "usrfile")) { 305 if (cfg->usrfile != NULL) { 306 free(cfg->usrfile); 307 cfg->usrfile = NULL; 308 } 309 if (strlen(value) > 0) 310 asprintf(&(cfg->usrfile), "%s", value); 311 return; 312 } 313 314 if (!strcmp(token, "cwlogdir")) { 315 if (cfg->cwlogdir != NULL) { 316 free(cfg->cwlogdir); 317 cfg->cwlogdir = NULL; 318 } 319 if (strlen(value) > 0) 320 asprintf(&(cfg->cwlogdir), "%s", value); 321 return; 322 } 323 324 if (!strcmp(token, "clienttimeout")) { 325 if (strlen(value) == 0) { 326 cfg->ctimeout = CS_CLIENT_TIMEOUT; 327 return; 328 } else { 329 cfg->ctimeout = atoi(value); 330 if (cfg->ctimeout < 100) 331 cfg->ctimeout *= 1000; 332 return; 333 } 334 } 335 336 if (!strcmp(token, "fallbacktimeout")) { 337 if (strlen(value) == 0) { 338 cfg->ftimeout = CS_CLIENT_TIMEOUT; 339 return; 340 } else { 341 cfg->ftimeout = atoi(value); 342 if (cfg->ftimeout < 100) 343 cfg->ftimeout *= 1000; 344 return; 345 } 346 } 347 348 if (!strcmp(token, "clientmaxidle")) { 349 if (strlen(value) == 0) { 350 cfg->cmaxidle = CS_CLIENT_MAXIDLE; 351 return; 352 } else { 353 cfg->cmaxidle = atoi(value); 354 return; 355 } 356 } 357 358 if (!strcmp(token, "cachedelay")) { 359 if (strlen(value) == 0) { 360 cfg->delay = CS_DELAY; 361 return; 362 } else { 363 cfg->delay = atoi(value); 364 return; 365 } 366 } 367 368 if (!strcmp(token, "bindwait")) { 369 if (strlen(value) == 0) { 370 cfg->bindwait = CS_BIND_TIMEOUT; 371 return; 372 } else { 373 cfg->bindwait = atoi(value); 374 return; 375 } 376 } 377 378 if (!strcmp(token, "netprio")) { 379 if (strlen(value) == 0) { 380 cfg->netprio = 0; 381 return; 382 } else { 383 cfg->netprio = atoi(value); 384 return; 385 } 386 } 387 388 if (!strcmp(token, "resolvedelay")) { 389 if (strlen(value) == 0) { 390 cfg->resolvedelay = CS_RESOLVE_DELAY; 391 return; 392 } else { 393 cfg->resolvedelay = atoi(value); 394 return; 395 } 396 } 397 398 if (!strcmp(token, "sleep")) { 399 if (strlen(value) == 0) { 400 cfg->tosleep = 0; 401 return; 402 } else { 403 cfg->tosleep = atoi(value); 404 return; 405 } 406 } 407 408 if (!strcmp(token, "unlockparental")) { 409 if (strlen(value) == 0) { 410 cfg->ulparent = 0; 411 return; 412 } else { 413 cfg->ulparent = atoi(value); 414 return; 415 } 416 } 417 418 if (!strcmp(token, "nice")) { 419 if (strlen(value) == 0) { 420 cfg->nice = 99; 421 return; 422 } else { 423 cfg->nice = atoi(value); 424 if ((cfg->nice<-20) || (cfg->nice>20)) cfg->nice = 99; 425 if (cfg->nice != 99) cs_setpriority(cfg->nice); // ignore errors 426 return; 427 } 428 } 429 430 if (!strcmp(token, "serialreadertimeout")) { 431 if (cfg->srtimeout < 100) 432 cfg->srtimeout = atoi(value) * 1000; 433 else 434 cfg->srtimeout = atoi(value); 435 if (cfg->srtimeout <= 0) 436 cfg->srtimeout = 1500; 437 return; 438 } 439 440 if (!strcmp(token, "maxlogsize")) { 441 if (strlen(value) == 0) { 442 cfg->max_log_size = 10; 443 return; 444 } else { 445 cfg->max_log_size = atoi(value); 446 if( cfg->max_log_size <= 10 ) 447 cfg->max_log_size = 10; 448 return; 449 } 450 } 451 452 if( !strcmp(token, "waitforcards")) { 453 if (strlen(value) == 0) { 454 cfg->waitforcards = 0; 455 return; 456 } else { 457 cfg->waitforcards = atoi(value); 458 return; 459 } 460 } 461 462 if( !strcmp(token, "preferlocalcards")) { 463 if (strlen(value) == 0) { 464 cfg->preferlocalcards = 0; 465 return; 466 } else { 467 cfg->preferlocalcards = atoi(value); 468 return; 469 } 470 } 471 472 if (token[0] != '#') 473 cs_log("Warning: keyword '%s' in global section not recognized", token); 387 474 } 388 475 … … 390 477 void chk_t_ac(char *token, char *value) 391 478 { 392 if (!strcmp(token, "enabled")) 393 { 394 cfg->ac_enabled=atoi(value); 395 if( cfg->ac_enabled<=0 ) cfg->ac_enabled=0; 396 else cfg->ac_enabled=1; 397 return; 398 } 399 400 if (!strcmp(token, "numusers")) 401 { 402 cfg->ac_users=atoi(value); 403 if( cfg->ac_users<0 ) cfg->ac_users=0; 404 return; 405 } 406 if (!strcmp(token, "sampletime")) 407 { 408 cfg->ac_stime=atoi(value); 409 if( cfg->ac_stime<0 ) cfg->ac_stime=2; 410 return; 411 } 412 if (!strcmp(token, "samples")) 413 { 414 cfg->ac_samples=atoi(value); 415 if( cfg->ac_samples<2 || cfg->ac_samples>10) cfg->ac_samples=10; 416 return; 417 } 418 if (!strcmp(token, "penalty")) 419 { 420 cfg->ac_penalty=atoi(value); 421 if( cfg->ac_penalty<0 ) cfg->ac_penalty=0; 422 return; 423 } 424 if (!strcmp(token, "aclogfile")) 425 { 426 strncpy(cfg->ac_logfile, value, sizeof(cfg->ac_logfile)-1); 427 return; 428 } 429 if( !strcmp(token, "fakedelay") ) 430 { 431 cfg->ac_fakedelay=atoi(value); 432 if( cfg->ac_fakedelay<100 || cfg->ac_fakedelay>1000 ) 433 cfg->ac_fakedelay=1000; 434 return; 435 } 436 if( !strcmp(token, "denysamples") ) 437 { 438 cfg->ac_denysamples=atoi(value); 439 if( cfg->ac_denysamples<2 || cfg->ac_denysamples>cfg->ac_samples-1 ) 440 cfg->ac_denysamples=cfg->ac_samples-1; 441 return; 442 } 443 if (token[0] != '#') 444 fprintf(stderr, "Warning: keyword '%s' in anticascading section not recognized\n",token); 445 //#endif moved this endif up two lines, I think this was erroneous - dingo35 479 if (!strcmp(token, "enabled")) { 480 cfg->ac_enabled = atoi(value); 481 if( cfg->ac_enabled <= 0 ) 482 cfg->ac_enabled = 0; 483 else 484 cfg->ac_enabled = 1; 485 return; 486 } 487 488 if (!strcmp(token, "numusers")) { 489 cfg->ac_users = atoi(value); 490 if( cfg->ac_users < 0 ) 491 cfg->ac_users = 0; 492 return; 493 } 494 495 if (!strcmp(token, "sampletime")) { 496 cfg->ac_stime = atoi(value); 497 if( cfg->ac_stime < 0 ) 498 cfg->ac_stime = 2; 499 return; 500 } 501 502 if (!strcmp(token, "samples")) { 503 cfg->ac_samples = atoi(value); 504 if( cfg->ac_samples < 2 || cfg->ac_samples > 10) 505 cfg->ac_samples = 10; 506 return; 507 } 508 509 if (!strcmp(token, "penalty")) { 510 cfg->ac_penalty = atoi(value); 511 if( cfg->ac_penalty < 0 ) 512 cfg->ac_penalty = 0; 513 return; 514 } 515 516 if (!strcmp(token, "aclogfile")) { 517 cs_strncpy(cfg->ac_logfile, value, sizeof(cfg->ac_logfile)); 518 return; 519 } 520 521 if( !strcmp(token, "fakedelay") ) { 522 cfg->ac_fakedelay = atoi(value); 523 if( cfg->ac_fakedelay < 100 || cfg->ac_fakedelay > 1000 ) 524 cfg->ac_fakedelay = 1000; 525 return; 526 } 527 528 if( !strcmp(token, "denysamples") ) { 529 cfg->ac_denysamples = atoi(value); 530 if( cfg->ac_denysamples < 2 || cfg->ac_denysamples > cfg->ac_samples - 1 ) 531 cfg->ac_denysamples=cfg->ac_samples-1; 532 return; 533 } 534 535 if (token[0] != '#') 536 cs_log( "Warning: keyword '%s' in anticascading section not recognized",token); 446 537 } 447 538 #endif … … 449 540 void chk_t_monitor(char *token, char *value) 450 541 { 451 if (!strcmp(token, "port")) { cfg->mon_port=atoi(value); return; } 452 if (!strcmp(token, "serverip")) { cfg->mon_srvip=inet_addr(value); return; } 453 if (!strcmp(token, "nocrypt")) { chk_iprange(value, &cfg->mon_allowed); return; } 454 if (!strcmp(token, "aulow")) { cfg->mon_aulow=atoi(value); return; } 455 if (!strcmp(token, "monlevel")) { cfg->mon_level=atoi(value); return; } 456 if (!strcmp(token, "hideclient_to")) { cfg->mon_hideclient_to=atoi(value); return; } 457 if (token[0] != '#') 458 fprintf(stderr, "Warning: keyword '%s' in monitor section not recognized\n",token); 542 if (!strcmp(token, "port")) { 543 if(strlen(value) == 0) { 544 cfg->mon_port = 0; 545 return; 546 } else { 547 cfg->mon_port=atoi(value); 548 return; 549 } 550 } 551 552 if (!strcmp(token, "serverip")) { 553 if(strlen(value) == 0) { 554 cfg->mon_srvip = 0; 555 return; 556 } else { 557 cfg->mon_srvip=inet_addr(value); 558 return; 559 } 560 } 561 562 if (!strcmp(token, "nocrypt")) { 563 if(strlen(value) == 0) { 564 clear_sip(&cfg->mon_allowed); 565 return; 566 } else { 567 chk_iprange(value, &cfg->mon_allowed); 568 return; 569 } 570 } 571 572 if (!strcmp(token, "aulow")) { 573 if(strlen(value) == 0) { 574 cfg->mon_aulow = 0; 575 return; 576 } else { 577 cfg->mon_aulow = atoi(value); 578 return; 579 } 580 } 581 582 if (!strcmp(token, "monlevel")) { 583 if(strlen(value) == 0) { 584 cfg->mon_level = 0; 585 return; 586 } else { 587 cfg->mon_level = atoi(value); 588 return; 589 } 590 } 591 592 if (!strcmp(token, "hideclient_to")) { 593 if(strlen(value) == 0) { 594 cfg->mon_hideclient_to = 0; 595 return; 596 } else { 597 cfg->mon_hideclient_to = atoi(value); 598 return; 599 } 600 } 601 602 if (token[0] != '#') 603 cs_log("Warning: keyword '%s' in monitor section not recognized",token); 459 604 } 460 605 461 606 void chk_t_camd33(char *token, char *value) 462 607 { 463 if (!strcmp(token, "port")) { cfg->c33_port=atoi(value); return; } 464 if (!strcmp(token, "serverip")) { cfg->c33_srvip=inet_addr(value); return; } 465 if (!strcmp(token, "nocrypt")) { chk_iprange(value, &cfg->c33_plain); return; } 466 if (!strcmp(token, "passive")) { cfg->c33_passive=(value[0]!='0'); return; } 467 if (!strcmp(token, "key")) 468 { 469 if (key_atob(value, cfg->c33_key)) 470 { 471 fprintf(stderr, "Configuration camd3.3x: Error in Key\n"); 472 exit(1); 473 } 474 cfg->c33_crypted=1; 475 return; 476 } 477 if (token[0] != '#') 478 fprintf(stderr, "Warning: keyword '%s' in camd33 section not recognized\n",token); 608 if (!strcmp(token, "port")) { 609 if(strlen(value) == 0) { 610 cfg->c33_port = 0; 611 return; 612 } else { 613 cfg->c33_port = atoi(value); 614 return; 615 } 616 } 617 618 if (!strcmp(token, "serverip")) { 619 if(strlen(value) == 0) { 620 cfg->c33_srvip = 0; 621 return; 622 } else { 623 cfg->c33_srvip = inet_addr(value); 624 return; 625 } 626 } 627 628 if (!strcmp(token, "nocrypt")) { 629 if(strlen(value) == 0) { 630 return; 631 } else { 632 chk_iprange(value, &cfg->c33_plain); 633 return; 634 } 635 } 636 637 if (!strcmp(token, "passive")) { 638 cfg->c33_passive = (value[0]!='0'); 639 return; 640 } 641 642 if (!strcmp(token, "key")) { 643 if (key_atob(value, cfg->c33_key)) { 644 fprintf(stderr, "Configuration camd3.3x: Error in Key\n"); 645 exit(1); 646 } 647 cfg->c33_crypted=1; 648 return; 649 } 650 651 if (token[0] != '#') 652 cs_log( "Warning: keyword '%s' in camd33 section not recognized",token); 479 653 } 480 654 481 655 void chk_t_camd35(char *token, char *value) 482 656 { 483 if (!strcmp(token, "port")) { cfg->c35_port=atoi(value); return; } 484 if (!strcmp(token, "serverip")) { cfg->c35_tcp_srvip=inet_addr(value); return; } 485 if (!strcmp(token, "suppresscmd08")) { cfg->c35_suppresscmd08=atoi(value); return; } 486 if (token[0] != '#') 487 fprintf(stderr, "Warning: keyword '%s' in camd35 section not recognized\n",token); 657 if (!strcmp(token, "port")) { 658 if(strlen(value) == 0) { 659 cfg->c35_port = 0; 660 return; 661 } else { 662 cfg->c35_port = atoi(value); 663 return; 664 } 665 } 666 667 if (!strcmp(token, "serverip")) { 668 if(strlen(value) == 0) { 669 cfg->c35_tcp_srvip = 0; 670 return; 671 } else { 672 cfg->c35_tcp_srvip = inet_addr(value); 673 return; 674 } 675 } 676 677 if (!strcmp(token, "suppresscmd08")) { 678 if(strlen(value) == 0) { 679 cfg->c35_suppresscmd08 = 0; 680 return; 681 } else { 682 cfg->c35_suppresscmd08=atoi(value); 683 return; 684 } 685 } 686 687 if (token[0] != '#') 688 cs_log( "Warning: keyword '%s' in camd35 section not recognized", token); 488 689 } 489 690 490 691 void chk_t_camd35_tcp(char *token, char *value) 491 692 { 492 if (!strcmp(token, "port")) { chk_port_tab(value, &cfg->c35_tcp_ptab); return; } 493 if (!strcmp(token, "serverip")) { cfg->c35_tcp_srvip=inet_addr(value); return; } 494 if (!strcmp(token, "suppresscmd08")) { cfg->c35_suppresscmd08=atoi(value); return; } 495 if (token[0] != '#') 496 fprintf(stderr, "Warning: keyword '%s' in camd35 tcp section not recognized\n",token); 693 if (!strcmp(token, "port")) { 694 if(strlen(value) == 0) { 695 clear_ptab(&cfg->c35_tcp_ptab); 696 return; 697 } else { 698 chk_port_tab(value, &cfg->c35_tcp_ptab); 699 return; 700 } 701 } 702 703 if (!strcmp(token, "serverip")) { 704 if(strlen(value) == 0) { 705 cfg->c35_tcp_srvip = 0; 706 return; 707 } else { 708 cfg->c35_tcp_srvip = inet_addr(value); 709 return; 710 } 711 } 712 713 if (!strcmp(token, "suppresscmd08")) { 714 if(strlen(value) == 0) { 715 cfg->c35_suppresscmd08 = 0; 716 return; 717 } else { 718 cfg->c35_suppresscmd08 = atoi(value); 719 return; 720 } 721 } 722 723 if (token[0] != '#') 724 cs_log( "Warning: keyword '%s' in camd35 tcp section not recognized", token); 497 725 } 498 726 499 727 void chk_t_newcamd(char *token, char *value) 500 728 { 501 if (!strcmp(token, "port")) { chk_port_tab(value, &cfg->ncd_ptab); return; } 502 if (!strcmp(token, "serverip")) { cfg->ncd_srvip=inet_addr(value); return; } 503 if (!strcmp(token, "allowed")) { chk_iprange(value, &cfg->ncd_allowed); return; } 504 if (!strcmp(token, "key")) 505 { 506 if (key_atob14(value, cfg->ncd_key)) 507 { 508 fprintf(stderr, "Configuration newcamd: Error in Key\n"); 509 exit(1); 510 } 511 return; 512 } 513 if (!strcmp(token, "keepalive")) 514 { 515 cfg->ncd_keepalive=atoi(value); 516 return; 517 } 518 if (token[0] != '#') 519 fprintf(stderr, "Warning: keyword '%s' in newcamd section not recognized\n",token); 729 if (!strcmp(token, "port")) { 730 if(strlen(value) == 0) { 731 clear_ptab(&cfg->ncd_ptab); 732 return; 733 } else { 734 chk_port_tab(value, &cfg->ncd_ptab); 735 return; 736 } 737 } 738 739 if (!strcmp(token, "serverip")) { 740 if(strlen(value) == 0) { 741 cfg->ncd_srvip = 0; 742 return; 743 } else { 744 cfg->ncd_srvip = inet_addr(value); 745 return; 746 } 747 } 748 749 if (!strcmp(token, "allowed")) { 750 if(strlen(value) == 0) { 751 clear_sip(&cfg->ncd_allowed); 752 return; 753 } else { 754 chk_iprange(value, &cfg->ncd_allowed); 755 return; 756 } 757 } 758 759 if (!strcmp(token, "key")) { 760 if (key_atob14(value, cfg->ncd_key)) { 761 fprintf(stderr, "Configuration newcamd: Error in Key\n"); 762 exit(1); 763 } 764 return; 765 } 766 767 if (!strcmp(token, "keepalive")) { 768 if(strlen(value) == 0) { 769 cfg->ncd_keepalive = 1; 770 return; 771 } else { 772 cfg->ncd_keepalive = atoi(value); 773 return; 774 } 775 } 776 777 if (token[0] != '#') 778 cs_log( "Warning: keyword '%s' in newcamd section not recognized", token); 520 779 } 521 780 522 781 void chk_t_cccam(char *token, char *value) 523 782 { 524 if (!strcmp(token, "port")) { cfg->cc_port=atoi(value); return; } 525 //if (!strcmp(token, "serverip")) { cfg->cc_srvip=inet_addr(value); return; } 526 if (!strcmp(token, "reshare")) { cfg->cc_reshare=atoi(value); return; } 527 if (!strcmp(token, "version")) { // cccam version 528 if (strlen(value)>sizeof(cfg->cc_version)-1) { 529 fprintf(stderr, "cccam config: version too long\n"); 530 exit(1); 531 } 532 memset(cfg->cc_version, 0, sizeof(cfg->cc_version)); 533 strncpy((char*)cfg->cc_version, value, sizeof(cfg->cc_version)-1); 534 return; 535 } 536 if (!strcmp(token, "build")) { // cccam build number 537 if (strlen(value)>sizeof(cfg->cc_build)-1) { 538 fprintf(stderr, "cccam config build number too long\n"); 539 exit(1); 540 } 541 memset(cfg->cc_build, 0, sizeof(cfg->cc_build)); 542 strncpy((char*)cfg->cc_build, value, sizeof(cfg->cc_build)-1); 543 return; 544 } 545 if (token[0] != '#') 546 fprintf(stderr, "Warning: keyword '%s' in cccam section not recognized\n",token); 783 if (!strcmp(token, "port")) { 784 if(strlen(value) == 0) { 785 cfg->cc_port = 0; 786 return; 787 } else { 788 cfg->cc_port = atoi(value); 789 return; 790 } 791 } 792 //if (!strcmp(token, "serverip")) { cfg->cc_srvip=inet_addr(value); return; } 793 794 if (!strcmp(token, "reshare")) { 795 if(strlen(value) == 0) { 796 cfg->cc_reshare = 0; 797 return; 798 } else { 799 cfg->cc_reshare=atoi(value); 800 return; 801 } 802 } 803 // cccam version 804 if (!strcmp(token, "version")) { 805 if (strlen(value) > sizeof(cfg->cc_version) - 1) { 806 fprintf(stderr, "cccam config: version too long\n"); 807 exit(1); 808 } 809 memset(cfg->cc_version, 0, sizeof(cfg->cc_version)); 810 strncpy((char*)cfg->cc_version, value, sizeof(cfg->cc_version) - 1); 811 return; 812 } 813 // cccam build number 814 if (!strcmp(token, "build")) { 815 if (strlen(value) > sizeof(cfg->cc_build) - 1) { 816 fprintf(stderr, "cccam config build number too long\n"); 817 exit(1); 818 } 819 memset(cfg->cc_build, 0, sizeof(cfg->cc_build)); 820 strncpy((char*)cfg->cc_build, value, sizeof(cfg->cc_build)-1); 821 return; 822 } 823 824 if (token[0] != '#') 825 cs_log( "Warning: keyword '%s' in cccam section not recognized",token); 547 826 } 548 827 549 828 void chk_t_radegast(char *token, char *value) 550 829 { 551 if (!strcmp(token, "port")) { cfg->rad_port=atoi(value); return; } 552 if (!strcmp(token, "serverip")) { cfg->rad_srvip=inet_addr(value); return; } 553 if (!strcmp(token, "allowed")) { chk_iprange(value, &cfg->rad_allowed); return; } 554 if (!strcmp(token, "user")) { strncpy(cfg->rad_usr, value, sizeof(cfg->rad_usr)-1); return; } 555 if (token[0] != '#') 556 fprintf(stderr, "Warning: keyword '%s' in radegast section not recognized\n",token); 830 if (!strcmp(token, "port")) { 831 if(strlen(value) == 0) { 832 cfg->rad_port = 0; 833 return; 834 } else { 835 cfg->rad_port = atoi(value); 836 return; 837 } 838 } 839 840 if (!strcmp(token, "serverip")) { 841 if(strlen(value) == 0) { 842 cfg->rad_srvip = 0; 843 return; 844 } else { 845 cfg->rad_srvip = inet_addr(value); 846 return; 847 } 848 } 849 850 if (!strcmp(token, "allowed")) { 851 if(strlen(value) == 0) { 852 clear_sip(&cfg->rad_allowed); 853 return; 854 } else { 855 chk_iprange(value, &cfg->rad_allowed); 856 return; 857 } 858 } 859 860 if (!strcmp(token, "user")) { 861 cs_strncpy(cfg->rad_usr, value, sizeof(cfg->rad_usr)); 862 return; 863 } 864 865 if (token[0] != '#') 866 cs_log( "Warning: keyword '%s' in radegast section not recognized", token); 557 867 } 558 868 559 869 void chk_t_serial(char *token, char *value) 560 870 { 561 if (!strcmp(token, "device")) 562 { 563 int l;564 l=strlen(cfg->ser_device); 565 if (l)cfg->ser_device[l++]=1; // use ctrl-a as delimiter566 strncpy(cfg->ser_device+l, value, sizeof(cfg->ser_device)-1-l);567 568 569 570 fprintf(stderr, "Warning: keyword '%s' in serial section not recognized\n",token);871 if (!strcmp(token, "device")) { 872 int l; 873 l = strlen(cfg->ser_device); 874 if (l) 875 cfg->ser_device[l++]=1; // use ctrl-a as delimiter 876 cs_strncpy(cfg->ser_device+l, value, sizeof(cfg->ser_device)-l); 877 return; 878 } 879 if (token[0] != '#') 880 cs_log( "Warning: keyword '%s' in serial section not recognized", token); 571 881 } 572 882 … … 577 887 if (!strcmp(token, "password")) { cs_atob(cfg->gbox_pwd, value, 4); return; } 578 888 if (!strcmp(token, "maxdist")) { cfg->maxdist=atoi(value); return; } 579 if (!strcmp(token, "ignorelist")) { strncpy((char *)cfg->ignorefile, value, sizeof(cfg->ignorefile)-1); return; }580 if (!strcmp(token, "onlineinfos")) { strncpy((char *)cfg->gbxShareOnl, value, sizeof(cfg->gbxShareOnl)-1); return; }581 if (!strcmp(token, "cardinfos")) { strncpy((char *)cfg->cardfile, value, sizeof(cfg->cardfile)-1); return; }889 if (!strcmp(token, "ignorelist")) { cs_strncpy((char *)cfg->ignorefile, value, sizeof(cfg->ignorefile)); return; } 890 if (!strcmp(token, "onlineinfos")) { cs_strncpy((char *)cfg->gbxShareOnl, value, sizeof(cfg->gbxShareOnl)); return; } 891 if (!strcmp(token, "cardinfos")) { cs_strncpy((char *)cfg->cardfile, value, sizeof(cfg->cardfile)); return; } 582 892 if (!strcmp(token, "locals")) 583 893 { … … 600 910 void chk_t_dvbapi(char *token, char *value) 601 911 { 602 if (!strcmp(token, "enabled")) { cfg->dvbapi_enabled=atoi(value); return; }603 if (!strcmp(token, "au")) { cfg->dvbapi_au=atoi(value); return; }604 if (!strcmp(token, "boxtype")) { strncpy(cfg->dvbapi_boxtype, value, sizeof(cfg->dvbapi_boxtype)-1); return; }605 if (!strcmp(token, "user")) { strncpy(cfg->dvbapi_usr, value, sizeof(cfg->dvbapi_usr)-1); return; }606 if (!strcmp(token, "priority")) { strncpy(cfg->dvbapi_priority, value, sizeof(cfg->dvbapi_priority)-1); return; }607 if (!strcmp(token, "ignore")) { strncpy(cfg->dvbapi_ignore, value, sizeof(cfg->dvbapi_ignore)-1); return; }608 912 if (!strcmp(token, "enabled")) { cfg->dvbapi_enabled=atoi(value); return; } 913 if (!strcmp(token, "au")) { cfg->dvbapi_au=atoi(value); return; } 914 if (!strcmp(token, "boxtype")) { cs_strncpy(cfg->dvbapi_boxtype, value, sizeof(cfg->dvbapi_boxtype)); return; } 915 if (!strcmp(token, "user")) { cs_strncpy(cfg->dvbapi_usr, value, sizeof(cfg->dvbapi_usr)); return; } 916 if (!strcmp(token, "priority")) { cs_strncpy(cfg->dvbapi_priority, value, sizeof(cfg->dvbapi_priority)); return; } 917 if (!strcmp(token, "ignore")) { cs_strncpy(cfg->dvbapi_ignore, value, sizeof(cfg->dvbapi_ignore)); return; } 918 609 919 if (token[0] != '#') 610 920 fprintf(stderr, "Warning: keyword '%s' in dvbapi section not recognized\n",token); 611 921 } 612 922 #endif … … 614 924 static void chk_token(char *token, char *value, int tag) 615 925 { 616 switch(tag) 617 { 618 case TAG_GLOBAL : chk_t_global(token, value); break; 619 case TAG_MONITOR : chk_t_monitor(token, value); break; 620 case TAG_CAMD33 : chk_t_camd33(token, value); break; 621 case TAG_CAMD35 : 622 case TAG_CS357X : chk_t_camd35(token, value); break; 623 case TAG_NEWCAMD : chk_t_newcamd(token, value); break; 624 case TAG_RADEGAST: chk_t_radegast(token, value); break; 625 case TAG_SERIAL : chk_t_serial(token, value); break; 626 case TAG_CS378X : chk_t_camd35_tcp(token, value); break; 926 switch(tag) { 927 case TAG_GLOBAL : chk_t_global(token, value); break; 928 case TAG_MONITOR : chk_t_monitor(token, value); break; 929 case TAG_CAMD33 : chk_t_camd33(token, value); break; 930 case TAG_CAMD35 : 931 case TAG_CS357X : chk_t_camd35(token, value); break; 932 case TAG_NEWCAMD : chk_t_newcamd(token, value); break; 933 case TAG_RADEGAST: chk_t_radegast(token, value); break; 934 case TAG_SERIAL : chk_t_serial(token, value); break; 935 case TAG_CS378X : chk_t_camd35_tcp(token, value); break; 627 936 #ifdef CS_WITH_GBOX 628 629 #endif 630 937 case TAG_GBOX : chk_t_gbox(token, value); break; 938 #endif 939 case TAG_CCCAM : chk_t_cccam(token, value); break; 631 940 #ifdef HAVE_DVBAPI 632 941 case TAG_DVBAPI : chk_t_dvbapi(token, value); break; 633 942 #else 634 943 case TAG_DVBAPI : fprintf(stderr, "Warning: OSCam compiled without DVB API support.\n"); break; 635 944 #endif 636 945 #ifdef CS_ANTICASC 637 638 #endif 639 946 case TAG_ANTICASC: chk_t_ac(token, value); break; 947 #endif 948 } 640 949 } 641 950 642 951 void init_len4caid() 643 952 { 644 int nr; 645 FILE *fp; 646 char *value; 647 648 memset(len4caid, 0, sizeof(ushort)<<8); 649 sprintf(token, "%s%s", cs_confdir, cs_l4ca); 650 if (!(fp=fopen(token, "r"))) 651 return; 652 for(nr=0; fgets(token, sizeof(token), fp);) 653 { 654 int i, c; 655 char *ptr; 656 if (!(value=strchr(token, ':'))) continue; 657 *value++='\0'; 658 if( (ptr=strchr(value, '#')) ) 659 *ptr='\0'; 660 if (strlen(trim(token))!=2) continue; 661 if (strlen(trim(value))!=4) continue; 662 if ((i=byte_atob(token))<0) continue; 663 if ((c=word_atob(value))<0) continue; 664 //printf("idx %02X = %04X\n", i, c); fflush(stdout); 665 len4caid[i]=c; 666 nr++; 667 } 668 fclose(fp); 669 cs_log("%d lengths for caid guessing loaded", nr); 670 return; 953 int nr; 954 FILE *fp; 955 char *value; 956 957 memset(len4caid, 0, sizeof(ushort)<<8); 958 sprintf(token, "%s%s", cs_confdir, cs_l4ca); 959 if (!(fp = fopen(token, "r"))) 960 return; 961 for(nr = 0; fgets(token, sizeof(token), fp);) { 962 int i, c; 963 char *ptr; 964 if (!(value=strchr(token, ':'))) 965 continue; 966 *value++ ='\0'; 967 if( (ptr = strchr(value, '#')) ) 968 *ptr = '\0'; 969 if (strlen(trim(token)) != 2) 970 continue; 971 if (strlen(trim(value)) != 4) 972 continue; 973 if ((i = byte_atob(token)) < 0) 974 continue; 975 if ((c = word_atob(value)) < 0) 976 continue; 977 len4caid[i] = c; 978 nr++; 979 } 980 fclose(fp); 981 cs_log("%d lengths for caid guessing loaded", nr); 982 return; 671 983 } 672 984 673 985 int search_boxkey(ushort caid, char *key) 674 986 { 675 int i, rc=0; 676 FILE *fp; 677 char c_caid[512]; 678 679 sprintf(c_caid, "%s%s", cs_confdir, cs_cert); 680 fp=fopen(c_caid, "r"); 681 if (fp) 682 { 683 for (; (!rc) && fgets(c_caid, sizeof(c_caid), fp);) 684 { 685 char *c_provid, *c_key; 686 687 c_provid=strchr(c_caid, '#'); 688 if (c_provid) *c_provid='\0'; 689 if (!(c_provid=strchr(c_caid, ':'))) continue; 690 *c_provid++='\0'; 691 if (!(c_key=strchr(c_provid, ':'))) continue; 692 *c_key++='\0'; 693 if (word_atob(trim(c_caid))!=caid) continue; 694 if ((i=(strlen(trim(c_key))>>1))>256) continue; 695 if (cs_atob((uchar *)key, c_key, i)<0) 696 { 697 cs_log("wrong key in \"%s\"", cs_cert); 698 continue; 699 } 700 rc=1; 701 } 702 fclose(fp); 703 } 987 int i, rc = 0; 988 FILE *fp; 989 char c_caid[512]; 990 991 sprintf(c_caid, "%s%s", cs_confdir, cs_cert); 992 fp = fopen(c_caid, "r"); 993 if (fp) { 994 for (; (!rc) && fgets(c_caid, sizeof(c_caid), fp);) { 995 char *c_provid, *c_key; 996 997 c_provid = strchr(c_caid, '#'); 998 if (c_provid) 999 *c_provid = '\0'; 1000 if (!(c_provid = strchr(c_caid, ':'))) 1001 continue; 1002 *c_provid++ ='\0'; 1003 if (!(c_key = strchr(c_provid, ':'))) 1004 continue; 1005 *c_key++ ='\0'; 1006 if (word_atob(trim(c_caid))!=caid) 1007 continue; 1008 if ((i=(strlen(trim(c_key))>>1)) > 256) 1009 continue; 1010 if (cs_atob((uchar *)key, c_key, i) < 0) { 1011 cs_log("wrong key in \"%s\"", cs_cert); 1012 continue; 1013 } 1014 rc = 1; 1015 } 1016 fclose(fp); 1017 } 704 1018 #ifdef OSCAM_INBUILD_KEYS 705 706 707 708 #endif 709 1019 for(i=0; (!rc) && (npkey[i].keylen); i++) 1020 if (rc=((caid==npkey[i].caid) && (npkey[i].provid==0))) 1021 memcpy(key, npkey[i].key, npkey[i].keylen); 1022 #endif 1023 return(rc); 710 1024 } 711 1025 712 1026 int init_config() 713 1027 { 714 715 716 1028 int tag=TAG_GLOBAL; 1029 FILE *fp; 1030 char *value; 717 1031 718 1032 #ifndef CS_EMBEDDED 719 1033 #ifdef PRIO_PROCESS 720 721 if ((cfg->nice=getpriority(PRIO_PROCESS, 0))==(-1))722 723 #endif 724 #endif 725 cfg->nice=99;726 cfg->ctimeout=CS_CLIENT_TIMEOUT;727 cfg->ftimeout=CS_CLIENT_TIMEOUT / 2;728 cfg->cmaxidle=CS_CLIENT_MAXIDLE;729 cfg->delay=CS_DELAY;730 cfg->bindwait=CS_BIND_TIMEOUT;731 cfg->resolvedelay=CS_RESOLVE_DELAY;732 cfg->mon_level=2;733 cfg->mon_hideclient_to=0;734 cfg->srtimeout=1500;735 cfg->ulparent=0;736 cfg->logfile =NULL;737 cfg->pidfile =NULL;738 cfg->usrfile =NULL;739 cfg->cwlogdir =NULL;1034 errno=0; 1035 if ((cfg->nice = getpriority(PRIO_PROCESS, 0)) == (-1)) 1036 if (errno) 1037 #endif 1038 #endif 1039 cfg->nice = 99; 1040 cfg->ctimeout = CS_CLIENT_TIMEOUT; 1041 cfg->ftimeout = CS_CLIENT_TIMEOUT / 2; 1042 cfg->cmaxidle = CS_CLIENT_MAXIDLE; 1043 cfg->delay = CS_DELAY; 1044 cfg->bindwait = CS_BIND_TIMEOUT; 1045 cfg->resolvedelay = CS_RESOLVE_DELAY; 1046 cfg->mon_level = 2; 1047 cfg->mon_hideclient_to = 0; 1048 cfg->srtimeout = 1500; 1049 cfg->ulparent = 0; 1050 cfg->logfile = NULL; 1051 cfg->pidfile = NULL; 1052 cfg->usrfile = NULL; 1053 cfg->cwlogdir = NULL; 740 1054 #ifdef CS_ANTICASC 741 cfg->ac_enabled=0; 742 cfg->ac_users=0; 743 cfg->ac_stime=2; 744 cfg->ac_samples=10; 745 cfg->ac_denysamples=8; 746 cfg->ac_fakedelay=1000; 747 strcpy(cfg->ac_logfile, "./oscam_ac.log"); 748 #endif 749 cfg->ncd_keepalive=1; 750 sprintf(token, "%s%s", cs_confdir, cs_conf); 751 if (!(fp=fopen(token, "r"))) 752 { 753 fprintf(stderr, "Cannot open config file '%s' (errno=%d)\n", token, errno); 754 exit(1); 755 } 756 while (fgets(token, sizeof(token), fp)) 757 { 758 int i, l; 759 //void *ptr; 760 if ((l=strlen(trim(token)))<3) continue; 761 if ((token[0]=='[') && (token[l-1]==']')) 762 { 763 for (token[l-1]=0, tag=-1, i=TAG_GLOBAL; cctag[i]; i++) 764 if (!strcmp(cctag[i], strtolower(token+1))) 765 tag=i; 766 continue; 767 } 768 if (!(value=strchr(token, '='))) continue; 769 *value++='\0'; 770 chk_token(trim(strtolower(token)), trim(value), tag); 771 } 772 fclose(fp); 1055 cfg->ac_enabled = 0; 1056 cfg->ac_users = 0; 1057 cfg->ac_stime = 2; 1058 cfg->ac_samples = 10; 1059 cfg->ac_denysamples = 8; 1060 cfg->ac_fakedelay = 1000; 1061 strcpy(cfg->ac_logfile, "./oscam_ac.log"); 1062 #endif 1063 cfg->ncd_keepalive=1; 1064 sprintf(token, "%s%s", cs_confdir, cs_conf); 1065 if (!(fp = fopen(token, "r"))) { 1066 fprintf(stderr, "Cannot open config file '%s' (errno=%d)\n", token, errno); 1067 exit(1); 1068 } 1069 while (fgets(token, sizeof(token), fp)) { 1070 int i, l; 1071 //void *ptr; 1072 if ((l = strlen(trim(token))) < 3) 1073 continue; 1074 if ((token[0] == '[') && (token[l-1] == ']')) { 1075 for (token[l-1] = 0, tag = -1, i = TAG_GLOBAL; cctag[i]; i++) 1076 if (!strcmp(cctag[i], strtolower(token+1))) 1077 tag = i; 1078 continue; 1079 } 1080 if (!(value=strchr(token, '='))) 1081 continue; 1082 *value++ ='\0'; 1083 chk_token(trim(strtolower(token)), trim(value), tag); 1084 } 1085 fclose(fp); 773 1086 #ifdef CS_LOGFILE 774 1087 if (cfg->logfile == NULL) 775 1088 asprintf(&(cfg->logfile), "%s", CS_LOGFILE); 776 1089 #endif 777 cs_init_log(cfg->logfile); 778 if (cfg->ftimeout>=cfg->ctimeout) 779 { 780 cfg->ftimeout = cfg->ctimeout - 100; 781 cs_log("WARNING: fallbacktimeout adjusted to %lu ms (must be smaller than clienttimeout (%lu ms))", cfg->ftimeout, cfg->ctimeout); 782 } 783 if(cfg->ftimeout < cfg->srtimeout) 784 { 785 cfg->ftimeout = cfg->srtimeout + 100; 786 cs_log("WARNING: fallbacktimeout adjusted to %lu ms (must be greater than serialreadertimeout (%lu ms))", cfg->ftimeout, cfg->srtimeout); 787 } 788 if(cfg->ctimeout < cfg->srtimeout) 789 { 790 cfg->ctimeout = cfg->srtimeout + 100; 791 cs_log("WARNING: clienttimeout adjusted to %lu ms (must be greater than serialreadertimeout (%lu ms))", cfg->ctimeout, cfg->srtimeout); 792 } 1090 cs_init_log(cfg->logfile); 1091 if (cfg->ftimeout >= cfg->ctimeout) { 1092 cfg->ftimeout = cfg->ctimeout - 100; 1093 cs_log("WARNING: fallbacktimeout adjusted to %lu ms (must be smaller than clienttimeout (%lu ms))", cfg->ftimeout, cfg->ctimeout); 1094 } 1095 if(cfg->ftimeout < cfg->srtimeout) { 1096 cfg->ftimeout = cfg->srtimeout + 100; 1097 cs_log("WARNING: fallbacktimeout adjusted to %lu ms (must be greater than serialreadertimeout (%lu ms))", cfg->ftimeout, cfg->srtimeout); 1098 } 1099 if(cfg->ctimeout < cfg->srtimeout) { 1100 cfg->ctimeout = cfg->srtimeout + 100; 1101 cs_log("WARNING: clienttimeout adjusted to %lu ms (must be greater than serialreadertimeout (%lu ms))", cfg->ctimeout, cfg->srtimeout); 1102 } 793 1103 #ifdef CS_ANTICASC 794 if( cfg->ac_denysamples+1>cfg->ac_samples ) 795 { 796 cfg->ac_denysamples=cfg->ac_samples-1; 797 cs_log("WARNING: DenySamples adjusted to %d", cfg->ac_denysamples); 798 } 799 #endif 800 return 0; 1104 if( cfg->ac_denysamples+1 > cfg->ac_samples ) { 1105 cfg->ac_denysamples = cfg->ac_samples - 1; 1106 cs_log("WARNING: DenySamples adjusted to %d", cfg->ac_denysamples); 1107 } 1108 #endif 1109 return 0; 801 1110 } 802 1111 803 1112 void chk_account(char *token, char *value, struct s_auth *account) 804 1113 { 805 int i; 806 char *ptr1;//, *ptr2; 807 if (!strcmp(token, "user")) { strncpy(account->usr, value, sizeof(account->usr)-1); return; } 808 if (!strcmp(token, "pwd")) { strncpy(account->pwd, value, sizeof(account->pwd)-1); return; } 809 if (!strcmp(token, "hostname")) { strncpy((char *)account->dyndns, value, sizeof(account->dyndns)-1); return; } 810 if (!strcmp(token, "betatunnel")) { chk_tuntab(value, &account->ttab); return; } 811 if (!strcmp(token, "uniq")) { account->uniq=atoi(value); return; } 812 if (!strcmp(token, "sleep")) { account->tosleep=atoi(value); return; } 813 if (!strcmp(token, "monlevel")) { account->monlvl=atoi(value); return; } 814 if (!strcmp(token, "caid")) { chk_caidtab(value, &account->ctab); return; } 815 if (!strcmp(token, "disabled")) { account->disabled=atoi(value); return; } 816 if (!strcmp(token, "suppresscmd08")) { account->c35_suppresscmd08=atoi(value); return; } 817 if (!strcmp(token, "keepalive")) 818 { 819 account->ncd_keepalive = atoi(value); 820 return; 821 } 822 /* 823 * case insensitive 824 */ 825 strtolower(value); 826 if (!strcmp(token, "au")) 827 { 828 if(value && value[0]=='1') account->autoau=1; 829 for (i=0; i<CS_MAXREADER; i++) 830 if ((reader[i].label[0]) && 831 (!strncmp(reader[i].label, value, strlen(reader[i].label)))) 832 account->au=i; 833 return; 834 } 835 if (!strcmp(token, "group"))\ 836 { 837 for (ptr1=strtok(value, ","); ptr1; ptr1=strtok(NULL, ",")) 838 { 839 int g; 840 g=atoi(ptr1); 841 if ((g>0) && (g<33)) account->grp|=(1<<(g-1)); 842 } 843 return; 844 } 845 if(!strcmp(token, "services")) { chk_services(value, &account->sidtabok, &account->sidtabno); return; } 846 if(!strcmp(token, "ident")) { chk_ftab(value, &account->ftab, "user", account->usr, "provid"); return; } 847 if(!strcmp(token, "class")) { chk_cltab(value, &account->cltab); return; } 848 if(!strcmp(token, "chid")) { chk_ftab(value, &account->fchid, "user", account->usr, "chid"); return; } 849 850 if (!strcmp(token, "expdate")) 851 { 852 if (!value[0]) { 853 account->expirationdate=(time_t)NULL; 854 return; 855 } 856 struct tm cstime; 857 memset(&cstime,0,sizeof(cstime)); 858 for (i=0, ptr1=strtok(value, "-/"); (i<3)&&(ptr1); ptr1=strtok(NULL, "-/"), i++) 859 { 860 switch(i) 861 { 862 case 0: cstime.tm_year=atoi(ptr1)-1900; break; 863 case 1: cstime.tm_mon =atoi(ptr1)-1; break; 864 case 2: cstime.tm_mday=atoi(ptr1); break; 865 } 866 } 867 account->expirationdate=mktime(&cstime); 868 return; 869 } 1114 int i; 1115 char *ptr1; 1116 1117 if (!strcmp(token, "user")) { 1118 cs_strncpy(account->usr, value, sizeof(account->usr)); 1119 return; 1120 } 1121 1122 if (!strcmp(token, "pwd")) { 1123 cs_strncpy(account->pwd, value, sizeof(account->pwd)); 1124 return; 1125 } 1126 1127 if (!strcmp(token, "hostname")) { 1128 cs_strncpy((char *)account->dyndns, value, sizeof(account->dyndns)); 1129 return; 1130 } 1131 1132 if (!strcmp(token, "betatunnel")) { 1133 if(strlen(value) == 0) { 1134 clear_tuntab(&account->ttab); 1135 return; 1136 } else { 1137 chk_tuntab(value, &account->ttab); 1138 return; 1139 } 1140 } 1141 1142 if (!strcmp(token, "uniq")) { 1143 if(strlen(value) == 0) { 1144 account->uniq = 0; 1145 return; 1146 } else { 1147 account->uniq = atoi(value); 1148 return; 1149 } 1150 } 1151 1152 if (!strcmp(token, "sleep")) { 1153 if(strlen(value) == 0) { 1154 account->tosleep = 0; 1155 return; 1156 } else { 1157 account->tosleep=atoi(value); 1158 return; 1159 } 1160 } 1161 1162 if (!strcmp(token, "monlevel")) { 1163 if(strlen(value) == 0) { 1164 account->monlvl = 0; 1165 return; 1166 } else { 1167 account->monlvl = atoi(value); 1168 return; 1169 } 1170 } 1171 1172 if (!strcmp(token, "caid")) { 1173 if(strlen(value) == 0) { 1174 clear_caidtab(&account->ctab); 1175 return; 1176 } else { 1177 chk_caidtab(value, &account->ctab); 1178 return; 1179 } 1180 } 1181 1182 if (!strcmp(token, "disabled")) { 1183 if(strlen(value) == 0) { 1184 account->disabled = 0; 1185 return; 1186 } else { 1187 account->disabled = atoi(value); 1188 return; 1189 } 1190 } 1191 1192 if (!strcmp(token, "suppresscmd08")) { 1193 if(strlen(value) == 0) { 1194 account->c35_suppresscmd08 = 0; 1195 return; 1196 } else { 1197 account->c35_suppresscmd08=atoi(value); 1198 return; 1199 } 1200 } 1201 1202 if (!strcmp(token, "keepalive")) { 1203 if(strlen(value) == 0) { 1204 account->ncd_keepalive = 1; 1205 return; 1206 } else { 1207 account->ncd_keepalive = atoi(value); 1208 return; 1209 } 1210 } 1211 /* 1212 * case insensitive 1213 */ 1214 strtolower(value); 1215 1216 if (!strcmp(token, "au")) { 1217 //set default values for usage during runtime from Webif 1218 account->au=-1; 1219 account->autoau=0; 1220 1221 if(value && value[0]=='1') account->autoau=1; 1222 for (i=0; i<CS_MAXREADER; i++) 1223 if ((reader[i].label[0]) && (!strncmp(reader[i].label, value, strlen(reader[i].label)))) 1224 account->au=i; 1225 return; 1226 } 1227 1228 if (!strcmp(token, "group")) { 1229 account->grp = 0; 1230 for (ptr1=strtok(value, ","); ptr1; ptr1=strtok(NULL, ",")) { 1231 int g; 1232 g = atoi(ptr1); 1233 if ((g>0) && (g < 33)) account->grp|=(1<<(g-1)); 1234 } 1235 return; 1236 } 1237 1238 if(!strcmp(token, "services")) { 1239 chk_services(value, &account->sidtabok, &account->sidtabno); 1240 return; 1241 } 1242 1243 if(!strcmp(token, "ident")) { /*ToDo ftab clear*/ 1244 chk_ftab(value, &account->ftab, "user", account->usr, "provid"); 1245 return; 1246 } 1247 1248 if(!strcmp(token, "class")) { 1249 chk_cltab(value, &account->cltab); 1250 return; 1251 } 1252 1253 if(!strcmp(token, "chid")) { 1254 chk_ftab(value, &account->fchid, "user", account->usr, "chid"); 1255 return; 1256 } 1257 1258 if (!strcmp(token, "expdate")) { 1259 if (!value[0]) { 1260 account->expirationdate=(time_t)NULL; 1261 return; 1262 } 1263 struct tm cstime; 1264 memset(&cstime,0,sizeof(cstime)); 1265 for (i=0, ptr1=strtok(value, "-/"); (i<3)&&(ptr1); ptr1=strtok(NULL, "-/"), i++) { 1266 switch(i) { 1267 case 0: cstime.tm_year=atoi(ptr1)-1900; break; 1268 case 1: cstime.tm_mon =atoi(ptr1)-1; break; 1269 case 2: cstime.tm_mday=atoi(ptr1); break; 1270 } 1271 } 1272 account->expirationdate=mktime(&cstime); 1273 return; 1274 } 870 1275 871 1276 #ifdef CS_ANTICASC 872 if( !strcmp(token, "numusers") ) 873 { 874 account->ac_users = atoi(value); 875 return; 876 } 877 if( !strcmp(token, "penalty") ) 878 { 879 account->ac_penalty = atoi(value); 880 return; 881 } 882 #endif 883 if (token[0] != '#') 884 fprintf(stderr, "Warning: keyword '%s' in account section not recognized\n",token); 885 886 // if (!strcmp(token, "caid")) 887 // { 888 // for (i=0, ptr1=strtok(value, ","); (i<CS_MAXCAIDTAB) && (ptr1); ptr1=strtok(NULL, ",")) 889 // { 890 // ulong caid, mask; 891 // if (ptr2=strchr(trim(ptr1), '&')) 892 // *ptr2++='\0'; 893 // else 894 // ptr2=""; 895 // if (((caid=a2i(ptr1, 2))|(mask=a2i(ptr2,-2))) < 0x10000) 896 // { 897 // account->caidtab[i][0]=caid; 898 // account->caidtab[i++][1]=mask; 899 // } 900 // else 901 // cs_log("WARNING: wrong CAID in %s -> ignored", cs_user); 902 // } 903 // } 1277 if( !strcmp(token, "numusers") ) { 1278 account->ac_users = atoi(value); 1279 return; 1280 } 1281 1282 if( !strcmp(token, "penalty") ) { 1283 account->ac_penalty = atoi(value); 1284 return; 1285 } 1286 #endif 1287 1288 if (token[0] != '#') 1289 cs_log( "Warning: keyword '%s' in account section not recognized",token); 904 1290 } 905 1291 … … 1002 1388 ulong caid; 1003 1389 char buf[strlen(value) + 1]; 1004 strncpy(buf, value, sizeof(buf));1390 cs_strncpy(buf, value, sizeof(buf)); 1005 1391 b=(what==1) ? sizeof(ulong) : sizeof(ushort); 1006 1392 for (i=0, ptr=strtok(value, ","); ptr; ptr=strtok(NULL, ",")) … … 1093 1479 nr++; 1094 1480 memset(sidtab, 0, sizeof(struct s_sidtab)); 1095 strncpy(sidtab->label, strtolower(token+1), sizeof(sidtab->label));1481 cs_strncpy(sidtab->label, strtolower(token+1), sizeof(sidtab->label)); 1096 1482 continue; 1097 1483 } … … 1154 1540 switch(i){ 1155 1541 case 0: 1156 strncpy(srvid->prov, trim(ptr1), sizeof(srvid->prov)-1);1542 cs_strncpy(srvid->prov, trim(ptr1), sizeof(srvid->prov)); 1157 1543 break; 1158 1544 case 1: 1159 strncpy(srvid->name, trim(ptr1), sizeof(srvid->name)-1);1545 cs_strncpy(srvid->name, trim(ptr1), sizeof(srvid->name)); 1160 1546 break; 1161 1547 case 2: 1162 strncpy(srvid->type, trim(ptr1), sizeof(srvid->type)-1);1548 cs_strncpy(srvid->type, trim(ptr1), sizeof(srvid->type)); 1163 1549 break; 1164 1550 case 3: 1165 strncpy(srvid->desc, trim(ptr1), sizeof(srvid->desc)-1);1551 cs_strncpy(srvid->desc, trim(ptr1), sizeof(srvid->desc)); 1166 1552 break; 1167 1553 } … … 1176 1562 srvid->caid[i] = word_atob(ptr1); 1177 1563 srvid->ncaid = i+1; 1564 //cs_debug("ld caid: %04X srvid: %04X Prov: %s Chan: %s",srvid->caid[i],srvid->srvid,srvid->prov,srvid->name); 1178 1565 } 1179 1566 nr++; … … 1203 1590 switch(i) 1204 1591 { 1205 case 0: strncpy(rdr->device, ptr, sizeof(rdr->device)-1); break;1592 case 0: cs_strncpy(rdr->device, ptr, sizeof(rdr->device)); break; 1206 1593 case 1: rdr->r_port=atoi(ptr); break; 1207 1594 case 2: rdr->l_port=atoi(ptr); break; … … 1220 1607 } 1221 1608 #ifdef CS_WITH_GBOX 1222 if (!strcmp(token, "password")) { strncpy((char *)rdr->gbox_pwd, (const char *)i2b(4, a2i(value, 4)), 4); return; }1609 if (!strcmp(token, "password")) { cs_strncpy((char *)rdr->gbox_pwd, (const char *)i2b(4, a2i(value, 4)), 4); return; } 1223 1610 if (!strcmp(token, "premium")) { rdr->gbox_prem=1; return; } 1224 1611 #endif … … 1230 1617 switch(i) 1231 1618 { 1232 case 0: strncpy(rdr->r_usr, ptr, sizeof(rdr->r_usr)-1); break;1233 case 1: strncpy(rdr->r_pwd, ptr, sizeof(rdr->r_pwd)-1); break;1619 case 0: cs_strncpy(rdr->r_usr, ptr, sizeof(rdr->r_usr)); break; 1620 case 1: cs_strncpy(rdr->r_pwd, ptr, sizeof(rdr->r_pwd)); break; 1234 1621 } 1235 1622 } … … 1242 1629 */ 1243 1630 strtolower(value); 1244 1631 1245 1632 if (!strcmp(token, "enable")) { rdr->enable=atoi(value) ? 1 : 0; return; } 1246 1633 if (!strcmp(token, "services")) { chk_services(value, &rdr->sidtabok, &rdr->sidtabno); return; } … … 1250 1637 //FIXME workaround for Smargo until native mode works 1251 1638 if (!strcmp(token, "smargopatch")) { rdr->smargopatch = atoi(value); return; } 1252 if (!strcmp(token, "label")) { strncpy(rdr->label, value, sizeof(rdr->label)-1); return; }1639 if (!strcmp(token, "label")) { cs_strncpy(rdr->label, value, sizeof(rdr->label)); return; } 1253 1640 if (!strcmp(token, "fallback")) { rdr->fallback=atoi(value) ? 1 : 0; return; } 1254 1641 if (!strcmp(token, "logport")) { rdr->log_port=atoi(value); return; } … … 1326 1713 } 1327 1714 if (!strcmp(value, "radegast")) { rdr->typ=R_RADEGAST; return; } 1328 if (!strcmp(value, "newcamd") || 1329 !strcmp(value, "newcamd525")) {rdr->typ=R_NEWCAMD; 1715 if (!strcmp(value, "newcamd") || 1716 !strcmp(value, "newcamd525")) {rdr->typ=R_NEWCAMD; 1330 1717 rdr->ncd_proto=NCD_525; return; } 1331 if (!strcmp(value, "newcamd524")) {rdr->typ=R_NEWCAMD; 1718 if (!strcmp(value, "newcamd524")) {rdr->typ=R_NEWCAMD; 1332 1719 rdr->ncd_proto=NCD_524; return; } 1333 1720 fprintf(stderr, "WARNING: value '%s' in protocol-line not recognized, assuming MOUSE\n",value); … … 1401 1788 } 1402 1789 memset(rdr->cc_version, 0, sizeof(rdr->cc_version)); 1403 strncpy(rdr->cc_version, value, sizeof(rdr->cc_version)-1);1790 cs_strncpy(rdr->cc_version, value, sizeof(rdr->cc_version)); 1404 1791 return; 1405 1792 } … … 1410 1797 } 1411 1798 memset(rdr->cc_build, 0, sizeof(rdr->cc_build)); 1412 strncpy(rdr->cc_build, value, sizeof(rdr->cc_build)-1);1799 cs_strncpy(rdr->cc_build, value, sizeof(rdr->cc_build)); 1413 1800 return; 1414 1801 } … … 1419 1806 if (!strcmp(token, "deprecated")) { rdr->deprecated=atoi(value); return; } 1420 1807 if (token[0] != '#') 1421 fprintf(stderr, "Warning: keyword '%s' in reader section not recognized\n",token);1808 cs_log( "Warning: keyword '%s' in reader section not recognized",token); 1422 1809 } 1423 1810 1424 1811 int init_readerdb() 1425 1812 { 1426 int tag=0, nr; 1427 FILE *fp; 1428 char *value; 1429 1430 sprintf(token, "%s%s", cs_confdir, cs_srvr); 1431 if (!(fp=fopen(token, "r"))) 1432 { 1433 cs_log("can't open file \"%s\" (errno=%d)\n", token, errno); 1434 return(1); 1435 } 1436 nr=0; 1437 while (fgets(token, sizeof(token), fp)) 1438 { 1439 int i, l; 1440 if ((l=strlen(trim(token)))<3) continue; 1441 if ((token[0]=='[') && (token[l-1]==']')) 1442 { 1443 token[l-1]=0; 1444 tag=(!strcmp("reader", strtolower(token+1))); 1445 if (reader[nr].label[0] && reader[nr].typ) nr++; 1446 memset(&reader[nr], 0, sizeof(struct s_reader)); 1447 reader[nr].enable = 1; 1448 reader[nr].tcp_rto = 30; 1449 reader[nr].show_cls = 10; 1450 reader[nr].maxqlen = CS_MAXQLEN; 1451 reader[nr].mhz = 357; 1452 reader[nr].cardmhz = 357; 1813 int tag = 0, nr; 1814 FILE *fp; 1815 char *value; 1816 1817 sprintf(token, "%s%s", cs_confdir, cs_srvr); 1818 if (!(fp=fopen(token, "r"))) { 1819 cs_log("can't open file \"%s\" (errno=%d)\n", token, errno); 1820 return(1); 1821 } 1822 nr = 0; 1823 while (fgets(token, sizeof(token), fp)) { 1824 int i, l; 1825 if ((l = strlen(trim(token))) < 3) 1826 continue; 1827 if ((token[0] == '[') && (token[l-1] == ']')) { 1828 token[l-1] = 0; 1829 tag = (!strcmp("reader", strtolower(token+1))); 1830 if (reader[nr].label[0] && reader[nr].typ) nr++; 1831 memset(&reader[nr], 0, sizeof(struct s_reader)); 1832 reader[nr].enable = 1; 1833 reader[nr].tcp_rto = 30; 1834 reader[nr].show_cls = 10; 1835 reader[nr].maxqlen = CS_MAXQLEN; 1836 reader[nr].mhz = 357; 1837 reader[nr].cardmhz = 357; 1453 1838 reader[nr].deprecated = 0; 1454 strcpy(reader[nr].pincode, "none"); 1455 for (i=1; i<CS_MAXCAIDTAB; reader[nr].ctab.mask[i++]=0xffff); 1456 continue; 1457 } 1458 if (!tag) continue; 1459 if (!(value=strchr(token, '='))) continue; 1460 *value++='\0'; 1461 chk_reader(trim(strtolower(token)), trim(value), &reader[nr]); 1462 } 1463 fclose(fp); 1464 return(0); 1839 strcpy(reader[nr].pincode, "none"); 1840 for (i=1; i<CS_MAXCAIDTAB; reader[nr].ctab.mask[i++]=0xffff); 1841 continue; 1842 } 1843 1844 if (!tag) 1845 continue; 1846 if (!(value=strchr(token, '='))) 1847 continue; 1848 *value++ ='\0'; 1849 chk_reader(trim(strtolower(token)), trim(value), &reader[nr]); 1850 } 1851 fclose(fp); 1852 return(0); 1465 1853 } 1466 1854 … … 1481 1869 if (!(fp=fopen(token, "r"))) 1482 1870 { 1483 cs_log("can't open file \"%s\" (errno=%d) irdeto guessing not loaded", 1871 cs_log("can't open file \"%s\" (errno=%d) irdeto guessing not loaded", 1484 1872 token, errno); 1485 1873 return(1); … … 1500 1888 case 1: b47 = a2i(ptr, 8); break; 1501 1889 case 2: caid = a2i(ptr, 4); break; 1502 case 3: 1890 case 3: 1503 1891 for( j=0; j<4; j++ ) 1504 1892 zSid[j]=ptr[j]; 1505 1893 zSid[4]=0; 1506 sid = a2i(zSid, 4); 1894 sid = a2i(zSid, 4); 1507 1895 break; 1508 1896 } 1509 1897 } 1510 if( !skip ) 1898 if( !skip ) 1511 1899 { 1512 1900 if (!(ird_row=(struct s_irdeto_quess*)malloc(sizeof(struct s_irdeto_quess)))) … … 1558 1946 if (!(fp=fopen(token, "r"))) 1559 1947 { 1560 cs_log("can't open file \"%s\" (errno=%d) anti-cascading table not loaded", 1948 cs_log("can't open file \"%s\" (errno=%d) anti-cascading table not loaded", 1561 1949 token, errno); 1562 1950 return; … … 1590 1978 ptr1=ptr; 1591 1979 break; 1592 case 1: 1980 case 1: 1593 1981 dwtime = atoi(ptr); 1594 1982 break; … … 1603 1991 switch( i ) 1604 1992 { 1605 case 0: 1993 case 0: 1606 1994 if( *ptr=='*' ) caid = 0; 1607 else caid = a2i(ptr, 4); 1995 else caid = a2i(ptr, 4); 1608 1996 break; 1609 case 1: 1997 case 1: 1610 1998 if( *ptr=='*' ) provid = 0; 1611 else provid = a2i(ptr, 6); 1999 else provid = a2i(ptr, 6); 1612 2000 break; 1613 case 2: 2001 case 2: 1614 2002 if( *ptr=='*' ) sid = 0; 1615 else sid = a2i(ptr, 4); 2003 else sid = a2i(ptr, 4); 1616 2004 break; 1617 case 3: 2005 case 3: 1618 2006 if( *ptr=='*' ) chid = 0; 1619 else chid = a2i(ptr, 4); 2007 else chid = a2i(ptr, 4); 1620 2008 break; 1621 2009 } … … 1639 2027 cpmap->next = 0; 1640 2028 1641 cs_debug("nr=%d, caid=%04X, provid=%06X, sid=%04X, chid=%04X, dwtime=%d", 2029 cs_debug("nr=%d, caid=%04X, provid=%06X, sid=%04X, chid=%04X, dwtime=%d", 1642 2030 nr, caid, provid, sid, chid, dwtime); 1643 2031 nr++; … … 1649 2037 } 1650 2038 #endif 2039 2040 /* 2041 * makes a char ready to write a token into config or webIf 2042 */ 2043 char *mk_t_caidtab(CAIDTAB *ctab){ 2044 int i = 0, needed = 1, pos = 0; 2045 while(ctab->caid[i]){ 2046 if(ctab->mask[i]) needed += 10; 2047 else needed += 5; 2048 if(ctab->cmap[i]) needed += 5; 2049 ++i; 2050 } 2051 char *value = (char *) malloc(needed * sizeof(char)); 2052 i = 0; 2053 while(ctab->caid[i]) { 2054 if(i == 0) { 2055 sprintf(value + pos, "%04X", ctab->caid[i]); 2056 pos += 4; 2057 } else { 2058 sprintf(value + pos, ",%04X", ctab->caid[i]); 2059 pos += 5; 2060 } 2061 if(ctab->mask[i]){ 2062 sprintf(value + pos, "&%04X", ctab->mask[i]); 2063 pos += 5; 2064 } 2065 if(ctab->cmap[i]){ 2066 sprintf(value + pos, ":%04X", ctab->cmap[i]); 2067 pos += 5; 2068 } 2069 ++i; 2070 } 2071 value[pos] = '\0'; 2072 return value; 2073 } 2074 2075 /* 2076 * makes a char ready to write a token into config or webIf 2077 */ 2078 char *mk_t_tuntab(TUNTAB *ttab){ 2079 int i = 0, needed = 1, pos = 0; 2080 while(ttab->bt_caidfrom[i]){ 2081 if(ttab->bt_srvid[i]) needed += 10; 2082 else needed += 5; 2083 if(ttab->bt_caidto[i]) needed += 5; 2084 ++i; 2085 } 2086 char *value = (char *) malloc(needed * sizeof(char)); 2087 i = 0; 2088 while(ttab->bt_caidfrom[i]) { 2089 if(i == 0) { 2090 sprintf(value + pos, "%04X", ttab->bt_caidfrom[i]); 2091 pos += 4; 2092 } else { 2093 sprintf(value + pos, ",%04X", ttab->bt_caidfrom[i]); 2094 pos += 5; 2095 } 2096 if(ttab->bt_srvid[i]){ 2097 sprintf(value + pos, ".%04X", ttab->bt_srvid[i]); 2098 pos += 5; 2099 } 2100 if(ttab->bt_caidto[i]){ 2101 sprintf(value + pos, ":%04X", ttab->bt_caidto[i]); 2102 pos += 5; 2103 } 2104 ++i; 2105 } 2106 value[pos] = '\0'; 2107 return value; 2108 } 2109 2110 /* 2111 * makes a char ready to write a token into config or webIf 2112 */ 2113 char *mk_t_group(ulong *grp){ 2114 int i = 0, needed = 1, pos = 0, dot = 0; 2115 char grpbit[33]; 2116 long2bitchar((long) grp, grpbit); 2117 2118 for(i = 0; i < 32; i++){ 2119 if (grpbit[i] == '1'){ 2120 needed += 2; 2121 if(i > 9) needed += 1; 2122 } 2123 } 2124 char *value = (char *) malloc(needed * sizeof(char)); 2125 2126 for(i = 0; i < 32; i++){ 2127 if (grpbit[i] == '1'){ 2128 if (dot == 0){ 2129 sprintf(value + pos, "%d", i+1); 2130 if (i > 9)pos += 2; 2131 else pos += 1; 2132 dot = 1; 2133 } else { 2134 sprintf(value + pos, ",%d", i+1); 2135 if (i > 9)pos += 3; 2136 else pos += 2; 2137 } 2138 } 2139 } 2140 value[pos] = '\0'; 2141 return value; 2142 } 2143 2144 /* 2145 * makes a char ready to write a token into config or webIf 2146 */ 2147 char *mk_t_ftab(FTAB *ftab){ 2148 int i = 0, j = 0, needed = 1, pos = 0; 2149 2150 needed = ftab->nfilts * 5; 2151 for (i = 0; i < ftab->nfilts; ++i) 2152 needed += ftab->filts[i].nprids * 7; 2153 2154 char *value = (char *) malloc(needed * sizeof(char)); 2155 2156 char *dot=""; 2157 for (i = 0; i < ftab->nfilts; ++i){ 2158 sprintf(value + pos, "%s%04X", dot, ftab->filts[i].caid); 2159 pos += 4; 2160 if (i > 0) pos += 1; 2161 dot=":"; 2162 for (j = 0; j < ftab->filts[i].nprids; ++j) { 2163 sprintf(value + pos, "%s%06lX", dot, ftab->filts[i].prids[j]); 2164 pos += 7; 2165 dot=","; 2166 } 2167 dot=";"; 2168 } 2169 2170 value[pos] = '\0'; 2171 return value; 2172 } -
trunk/oscam-simples.c
r1634 r1682 360 360 #endif 361 361 362 /* Clears the s_ip structure provided. The pointer will be set to NULL so everything is cleared.*/ 363 void clear_sip(struct s_ip **sip){ 364 struct s_ip *cip = *sip, *lip; 365 for (*sip = NULL; cip != NULL; cip = lip){ 366 lip = cip->next; 367 free(cip); 368 } 369 } 370 371 /* Clears the s_ptab struct provided by setting nfilts and nprids to zero. */ 372 void clear_ptab(struct s_ptab *ptab){ 373 int i; 374 for (i = 0; i < ptab->nports; i++) { 375 ptab->ports[i].ftab.nfilts = 0; 376 ptab->ports[i].ftab.filts[0].nprids = 0; 377 } 378 ptab->nports = 0; 379 } 380 381 /* Clears given caidtab */ 382 void clear_caidtab(struct s_caidtab *ctab){ 383 int i; 384 for (i = 0; i < CS_MAXCAIDTAB; i++) { 385 ctab->caid[i] = 0; 386 ctab->mask[i] = 0; 387 ctab->cmap[i] = 0; 388 } 389 } 390 391 /* Clears given tuntab */ 392 void clear_tuntab(struct s_tuntab *ttab){ 393 int i; 394 for (i = 0; i < CS_MAXTUNTAB; i++) { 395 ttab->bt_caidfrom[i] = 0; 396 ttab->bt_caidto[i] = 0; 397 ttab->bt_srvid[i] = 0; 398 } 399 } 400 401 /* Converts a long value to a char array in bitwise representation. 402 Note that the result array MUST be at least 33 bit large and that 403 this function assumes long values to hold only values up to 32bits and to be positive! 404 the result of e.g. long 7 is 11100000000000000000000000000000 this means the array 405 is reversed */ 406 void long2bitchar(long value, char *result){ 407 int pos; 408 for (pos=0;pos<32;pos++) result[pos]='0'; 409 result[pos] = '\0'; 410 411 pos=0; 412 while (value > 0 && pos < 32){ 413 if(value % 2 == 1) result[pos]='1'; 414 else result[pos]='0'; 415 value=value / 2; 416 pos++; 417 } 418 } 419 362 420 /* 363 421 * Ordinary strncpy does not terminate the string if the source
Note:
See TracChangeset
for help on using the changeset viewer.