18ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project/* 28ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * $Id: clientid.c,v 1.1 2004/11/14 07:26:26 paulus Exp $ 38ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 48ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Copyright (C) 1995,1996,1997 Lars Fenneberg 58ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 68ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * See the file COPYRIGHT for the respective terms and conditions. 78ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * If the file is missing contact me at lf@elemental.net 88ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * and I'll send you a copy. 98ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 108ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project */ 118ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 128ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#include <includes.h> 138ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#include <radiusclient.h> 148ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 158ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectstruct map2id_s { 168ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project char *name; 178ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project UINT4 id; 188ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 198ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project struct map2id_s *next; 208ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project}; 218ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 228ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectstatic struct map2id_s *map2id_list = NULL; 238ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 248ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project/* 258ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Function: rc_read_mapfile 268ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 278ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Purpose: Read in the ttyname to port id map file 288ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 298ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Arguments: the file name of the map file 308ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 318ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Returns: zero on success, negative integer on failure 328ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project */ 338ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 348ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Projectint rc_read_mapfile(char *filename) 358ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project{ 368ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project char buffer[1024]; 378ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project FILE *mapfd; 388ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project char *c, *name, *id, *q; 398ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project struct map2id_s *p; 408ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project int lnr = 0; 418ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 428ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if ((mapfd = fopen(filename,"r")) == NULL) 438ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project { 448ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project error("rc_read_mapfile: can't read %s: %s", filename, strerror(errno)); 458ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project return (-1); 468ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project } 478ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 488ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#define SKIP(p) while(*p && isspace(*p)) p++; 498ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 508ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project while (fgets(buffer, sizeof(buffer), mapfd) != NULL) 518ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project { 528ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project lnr++; 538ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 548ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project q = buffer; 558ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 568ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project SKIP(q); 578ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 588ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if ((*q == '\n') || (*q == '#') || (*q == '\0')) 598ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project continue; 608ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 618ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if (( c = strchr(q, ' ')) || (c = strchr(q,'\t'))) { 628ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 638ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *c = '\0'; c++; 648ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project SKIP(c); 658ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 668ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project name = q; 678ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project id = c; 688ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 698ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if ((p = (struct map2id_s *)malloc(sizeof(*p))) == NULL) { 708ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project novm("rc_read_mapfile"); 718ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project return (-1); 728ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project } 738ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 748ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project p->name = strdup(name); 758ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project p->id = atoi(id); 768ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project p->next = map2id_list; 778ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project map2id_list = p; 788ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 798ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project } else { 808ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 818ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project error("rc_read_mapfile: malformed line in %s, line %d", filename, lnr); 828ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project return (-1); 838ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 848ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project } 858ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project } 868ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 878ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project#undef SKIP 888ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 898ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project fclose(mapfd); 908ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 918ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project return 0; 928ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project} 938ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 948ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project/* 958ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Function: rc_map2id 968ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 978ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Purpose: Map ttyname to port id 988ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 998ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Arguments: full pathname of the tty 1008ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * 1018ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project * Returns: port id, zero if no entry found 1028ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project */ 1038ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 1048ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source ProjectUINT4 rc_map2id(char *name) 1058ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project{ 1068ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project struct map2id_s *p; 1078ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project char ttyname[PATH_MAX]; 1088ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 1098ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project *ttyname = '\0'; 1108ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if (*name != '/') 1118ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project strcpy(ttyname, "/dev/"); 1128ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 1138ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project strncat(ttyname, name, sizeof(ttyname)); 1148ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 1158ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project for(p = map2id_list; p; p = p->next) 1168ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project if (!strcmp(ttyname, p->name)) return p->id; 1178ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 1188ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project warn("rc_map2id: can't find tty %s in map database", ttyname); 1198ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project 1208ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project return 0; 1218ad0dd2a5c5f23cd210aedba72a43e48026e7436The Android Open Source Project} 122