int Dread(Dlink **L,FILE *fp,void * read_link(FILE *f)) { int count,i; void *buf; *L = Dopen(); while((buf =read_link(fp)) != NULL) Dadd(*L,buf); return 1; }
Buffer * Bopen(Discdesc *dd) { Buffer *b; b = emalloc(sizeof(Buffer)); b->disc = Dopen(dd); Strinit(&b->cache); return b; }
Dlink *Dcopy(Dlink *LN) { Dlink *tmp; D_l *pt; tmp = Dopen(); pt = LN->st; while( pt !=NULL) { Dadd(tmp,pt->bf); pt = pt->nx; } return(tmp); }
int SetSupGroups(LINACONFIG *lc,int Index) { FILE *pf=NULL; char buff[2000],*pt,*Pw,*UserName; int GroupNo,Ugid,*ipt,count,*array,i; Dlink *Glist=NULL; pf = popen("cat /etc/group","r"); if(pf==NULL) return 0; Glist=Dopen(); UserName = GetUserId(lc,Index); Ugid = GetGid(lc,Index); while (fgets(buff,1999,pf) != NULL) { if( (pt=GetLoginId(buff))==NULL) continue; // Actually Group Name Pw = GetUserPasswd(buff); if(Pw==NULL) continue; if(Pw[0]=='\0') { free(Pw);continue;} GroupNo=GetUserNo(buff); if(GroupNo==Ugid) {free(Pw);continue;} if((i=SearchString(buff,UserName))>= 0) { int j=0; j =i; while((buff[j]>' ') &&(buff[j]!=',')&&(buff[j]!=':')) j++; buff[j]='\0'; if(strcmp(buff+i,UserName)==0) { ipt=(int *)malloc(sizeof(int)); *ipt = GroupNo; Dadd(Glist,ipt); // printf("%s : %d\n",pt,*ipt); printf("%d ",*ipt); } } free(pt);free(Pw); } count = Dcount(Glist); printf(" :Supp group count = %d\n",count); fflush(stdout); if(count > 0) { array = (int *)malloc(sizeof(int)*(count)); Resetlink(Glist); i=0; while( (ipt = (int *)Getrecord(Glist))!= NULL) { array[i++]=*ipt; } setgroups(count,array); free(array); } pclose(pf); Dempty(Glist); return count; }
Dlink *Dnewlist(Dlink *LN,void * Dnewrule(void *)) { Dlink *tmp; D_l *pt; if(LN==NULL) { printf("Error: Empty list:Dnewlist\n"); exit(0); } tmp = Dopen(); pt = LN->st; while( pt !=NULL) { Dadd(tmp,Dnewrule(pt->bf)); pt = pt->nx; } return(tmp); }
Dlink *Dsublist(Dlink *LN,void *s,int Dcondition(void *,void *)) { Dlink *tmp; D_l *pt; if(LN==NULL) { printf("Error: Empty list:Dsublist\n"); exit(0); } tmp = Dopen(); pt = LN->st; while( pt !=NULL) { if(Dcondition(s,pt->bf)) Dadd(tmp,pt->bf); pt = pt->nx; } return(tmp); }
int Dreadauto(Dlink **L,char *flname, int size_of_rec){ int count,i,ret; void *buf; FILE* fp; *L = Dopen(); if( (fp =fopen(flname,"rb")) == NULL ) return 0; if( fread(&count,sizeof(int),1,fp) <= 0 ) { fclose(fp); return -1; } for(i=0;i<count;i++) { buf = (void *) malloc(size_of_rec); if(( fread(buf,size_of_rec,1,fp)) > 0 ) Dadd(*L,buf); else { fclose(fp);return -1; } } fclose(fp); return 1; }
Dlink *ReadSessionsFile(void) { int i; char buff[500],Field[35]; FILE *fp; char *pt; Dlink *Slist=NULL; SESSIONINFO *spt; Slist=Dopen(); fp = fopen("/usr/share/config/lina/session","r"); if(fp==NULL) fp=fopen("/etc/xdg/lina/session","r"); if(fp==NULL) { fp = fopen("/usr/share/config/lina/session","w"); if(fp != NULL) { fprintf(fp,"KDE : startkde\n"); fprintf(fp,"GNOME: gnome-session\n"); fprintf(fp,"XFCE: startxfce4\n"); fclose(fp); fp = fopen("/usr/share/config/lina/session","r"); } } if(fp != NULL) { while(fgets(buff,299,fp) != NULL) { SkipCommentLine; pt=strchr(buff,':'); pt[0]='\0'; pt++; // while(*pt==' ') pt++; // j=0;while(pt[j]>= ' ')j++; // pt[j]='\0'; ProcessValuePointer(pt); sscanf(buff,"%s",Field); // sscanf(pt,"%s",Value); spt = (SESSIONINFO *)malloc(sizeof(SESSIONINFO)); strncpy(spt->Name,Field,29); strncpy(spt->Command,pt,99); Dadd(Slist,spt); } fclose(fp); } //if return Slist; }
void *ReadConfig(LINACONFIG *lc) { void *img,*img1; FILE *fp; struct stat fstat; SESSIONINFO *spt; char buff[300],*pt,Field[60],Value[300]; int i,j; InitConfig(lc); lc->Mask = MakeMask(Isize*4,Isize*4,0.5); fp = fopen("/usr/share/config/lina/linarc","r"); if(fp==NULL){ fp = fopen("/etc/xdg/lina/linarc","r"); if(fp!=NULL) { lstat("/etc/xdg/lina/linarc",&fstat); if( (fstat.st_mode&00077)!=0) { printf("Others Got Access To File...\n"); fclose(fp); fp=NULL; } } } else { lstat("/usr/share/config/lina/linarc",&fstat); if( (fstat.st_mode&00077)!=0) { printf("Others Got Access To File...\n"); fclose(fp); fp=NULL; } } if(fp != NULL) { while(fgets(buff,299,fp) != NULL) { SkipCommentLine; pt=strchr(buff,':'); if(pt==NULL) continue; pt[0]='\0'; pt++; if(sscanf(buff,"%s",Field)<= 0) continue; ProcessValuePointer(pt); if( strcmp(Field,"BackGround")==0 ) { strcpy(lc->Bkgr,pt); continue; } if( strcmp(Field,"RootPicture")==0 ) { strcpy(lc->RootPic,pt); continue; } if( strcmp(Field,"UserPicture")==0 ) { // printf("%s\n",pt); // fflush(stdout); strcpy(lc->UserPic,pt); continue; } if( strcmp(Field,"DefaultUser")==0 ) { strncpy(lc->DefUser,pt,29); continue; } if( strcmp(Field,"DefaultSession")==0 ) { strncpy(lc->DefSession,pt,29); continue; } if( strcmp(Field,"Red")==0 ) { sscanf(pt,"%d",&(lc->Red)); if(lc->Red < 0) lc->Red=0; if(lc->Red > 255) lc->Red=255; continue; } if( strcmp(Field,"Green")==0 ) { sscanf(pt,"%d",&(lc->Green)); if(lc->Green < 0) lc->Green=0; if(lc->Green > 255) lc->Green=255; continue; } if( strcmp(Field,"Blue")==0 ) { sscanf(pt,"%d",&(lc->Blue)); if(lc->Blue < 0) lc->Blue=0; if(lc->Blue > 255) lc->Blue=255; continue; } if( strcmp(Field,"FontRed")==0 ) { sscanf(pt,"%d",&(lc->FontRed)); if(lc->FontRed < 0) lc->FontRed=0; if(lc->FontRed > 255) lc->FontRed=255; continue; } if( strcmp(Field,"FontGreen")==0 ) { sscanf(pt,"%d",&(lc->FontGreen)); if(lc->FontGreen < 0) lc->FontGreen=0; if(lc->FontGreen > 255) lc->FontGreen=255; continue; } if( strcmp(Field,"FontBlue")==0 ) { sscanf(pt,"%d",&(lc->FontBlue)); if(lc->FontBlue < 0) lc->FontBlue=0; if(lc->FontBlue > 255) lc->FontBlue=255; continue; } if( strcmp(Field,"HighRed")==0 ) { sscanf(pt,"%d",&(lc->HighRed)); if(lc->HighRed < 0) lc->HighRed=0; if(lc->HighRed > 255) lc->HighRed=255; continue; } if( strcmp(Field,"HighGreen")==0 ) { sscanf(pt,"%d",&(lc->HighGreen)); if(lc->HighGreen < 0) lc->HighGreen=0; if(lc->HighGreen > 255) lc->HighGreen=255; continue; } if( strcmp(Field,"HighBlue")==0 ) { sscanf(pt,"%d",&(lc->HighBlue)); if(lc->HighBlue < 0) lc->HighBlue=0; if(lc->HighBlue > 255) lc->HighBlue=255; continue; } if( strcmp(Field,"ButRed")==0 ) { sscanf(pt,"%d",&(lc->ButRed)); if(lc->ButRed < 0) lc->ButRed=0; if(lc->ButRed > 255) lc->ButRed=255; continue; } if( strcmp(Field,"ButGreen")==0 ) { sscanf(pt,"%d",&(lc->ButGreen)); if(lc->ButGreen < 0) lc->ButGreen=0; if(lc->ButGreen > 255) lc->ButGreen=255; continue; } if( strcmp(Field,"ButBlue")==0 ) { sscanf(pt,"%d",&(lc->ButBlue)); if(lc->ButBlue < 0) lc->ButBlue=0; if(lc->ButBlue > 255) lc->ButBlue=255; continue; } if( strcmp(Field,"DateRed")==0 ) { sscanf(pt,"%d",&(lc->DateRed)); if(lc->DateRed < 0) lc->DateRed=0; if(lc->DateRed > 255) lc->DateRed=255; continue; } if( strcmp(Field,"DateGreen")==0 ) { sscanf(pt,"%d",&(lc->DateGreen)); if(lc->DateGreen < 0) lc->DateGreen=0; if(lc->DateGreen > 255) lc->DateGreen=255; continue; } if( strcmp(Field,"DateBlue")==0 ) { sscanf(pt,"%d",&(lc->DateBlue)); if(lc->DateBlue < 0) lc->DateBlue=0; if(lc->DateBlue > 255) lc->DateBlue=255; continue; } if( strcmp(Field,"Transparency")==0 ) { sscanf(pt,"%f",&(lc->Transparency)); if(lc->Transparency < 0.001) lc->Transparency=0.001; if(lc->Transparency > 1.0) lc->Transparency=1.0; continue; } if( strcmp(Field,"RoundingFac")==0 ) { sscanf(pt,"%f",&(lc->fac)); if(lc->fac < 0) lc->fac=0; if(lc->fac > 1.0) lc->fac =1.0; continue; } if( strcmp(Field,"DateFont")==0 ) { sscanf(pt,"%d",&(lc->DateFont)); if(lc->DateFont < 0) lc->DateFont=0; if(lc->DateFont > 35) lc->DateFont =35; continue; } if( strcmp(Field,"RootLogin")==0 ) { lc->NoRootLogin=1; printf("%s :%s:\n",Field,pt); if((strcmp(pt,"yes")==0)||(strcmp(pt,"Yes")==0)||(strcmp(pt,"YES")==0)) { lc->NoRootLogin=0; } if((strcmp(pt,"no")==0)||(strcmp(pt,"No")==0)||(strcmp(pt,"NO")==0)) { lc->NoRootLogin=1; } continue; } if( strcmp(Field,"TextMode")==0 ) { lc->TextMode=1; printf("%s :%s:\n",Field,pt); if((strcmp(pt,"yes")==0)||(strcmp(pt,"Yes")==0)||(strcmp(pt,"YES")==0)) { lc->TextMode=1; } if((strcmp(pt,"no")==0)||(strcmp(pt,"No")==0)||(strcmp(pt,"NO")==0)) { lc->TextMode=0; } continue; } if( strcmp(Field,"SafeMode")==0 ) { lc->SafeMode=1; printf("%s :%s:\n",Field,pt); if((strcmp(pt,"yes")==0)||(strcmp(pt,"Yes")==0)||(strcmp(pt,"YES")==0)) { lc->SafeMode=1; } if((strcmp(pt,"no")==0)||(strcmp(pt,"No")==0)||(strcmp(pt,"NO")==0)) { lc->SafeMode=0; } continue; } if( strcmp(Field,"ShowTime")==0 ) { lc->ShowTime=1; printf("%s :%s:\n",Field,pt); if((strcmp(pt,"yes")==0)||(strcmp(pt,"Yes")==0)||(strcmp(pt,"YES")==0)) { lc->ShowTime=1; } if((strcmp(pt,"no")==0)||(strcmp(pt,"No")==0)||(strcmp(pt,"NO")==0)) { lc->ShowTime=0; } continue; } } // while fclose(fp); } img=NULL; if(lc->RootPic[0]!='\0') { img = kgGetImage(lc->RootPic); } if(img==NULL) { img = kgGetImageCopy(NULL,&rimg_str); } img1 = kgMaskImage(img,lc->Mask); lc->Rimg = kgChangeSizeImage(img1,Isize,Isize); lc->Rthumb = kgChangeSizeImage(img1,Tsize,Tsize); kgFreeImage(img); kgFreeImage(img1); img=NULL; if(lc->UserPic[0]!='\0') { img = kgGetImage(lc->UserPic); } if(img==NULL) { img = kgGetImageCopy(NULL,&uimg_str); } img1 = kgMaskImage(img,lc->Mask); lc->Uimg = kgChangeSizeImage(img1,Isize,Isize); lc->Uthumb = kgChangeSizeImage(img1,Tsize,Tsize); kgFreeImage(img); kgFreeImage(img1); lc->Slist=Dopen(); fp = fopen("/usr/share/config/lina/session","r"); if(fp==NULL) fopen("/etc/xdg/lina/session","r"); if(fp != NULL) { while(fgets(buff,299,fp) != NULL) { SkipCommentLine; pt=strchr(buff,':'); pt[0]='\0'; pt++; // while(*pt==' ') pt++; // j=0;while(pt[j]>= ' ')j++; // pt[j]='\0'; if(sscanf(buff,"%s",Field)<= 0) continue; ProcessValuePointer(pt); // sscanf(pt,"%s",Value); spt = (SESSIONINFO *)malloc(sizeof(SESSIONINFO)); strncpy(spt->Name,Field,29); strncpy(spt->Command,pt,99); Dadd(lc->Slist,spt); } fclose(fp); } //if else { spt = (SESSIONINFO *)malloc(sizeof(SESSIONINFO)); strcpy(spt->Name,"KDE"); strcpy(spt->Command,"startkde"); Dadd(lc->Slist,spt); spt = (SESSIONINFO *)malloc(sizeof(SESSIONINFO)); strcpy(spt->Name,"GNOME"); strcpy(spt->Command,"gnome-session"); Dadd(lc->Slist,spt); spt = (SESSIONINFO *)malloc(sizeof(SESSIONINFO)); strcpy(spt->Name,"XFCE"); strcpy(spt->Command,"startxfce4"); Dadd(lc->Slist,spt); WriteSessionsFile(lc->Slist); } if(lc->TextMode) { spt = (SESSIONINFO *)malloc(sizeof(SESSIONINFO)); strcpy(spt->Name,"Text Console"); spt->Command[0]='\0'; Dappend(lc->Slist,spt); } if(lc->SafeMode) { spt = (SESSIONINFO *)malloc(sizeof(SESSIONINFO)); strcpy(spt->Name,"Fail Safe"); strcpy(spt->Command,"xterm -geometry 80x24-0-0"); Dappend(lc->Slist,spt); } #if 0 if(lc->RootPic[0]=='\0') { lc->Rimg = kgGetImageCopy(NULL,&rimg_str); lc->Rthumb = kgGetImageCopy(NULL,&rthumb_str); } else { img = kgGetImage(lc->RootPic); lc->Rimg = kgChangeSizeImage(img,Isize,Isize); lc->Rthumb = kgChangeSizeImage(lc->Rimg,Tsize,Tsize); kgFreeImage(img); } if(lc->UserPic[0]=='\0') { lc->Uimg = kgGetImageCopy(NULL,&uimg_str); lc->Uthumb = kgGetImageCopy(NULL,&uthumb_str); } else { img = kgGetImage(lc->UserPic); lc->Uimg = kgChangeSizeImage(img,Isize,Isize); lc->Uthumb = kgChangeSizeImage(lc->Uimg,Tsize,Tsize); kgFreeImage(img); } #endif ReadUsersInfo(lc); }
void ReadUsersInfo(LINACONFIG *lc) { USERINFO *Usr; char *Shell=NULL; FILE *pf=NULL,*sf=NULL; char buff[500],*pt,*Pw,sbuff[500],*tmp,*tmp1; int UserNo; system("cat /etc/passwd 2>/tmp/.Junk1 >/tmp/.Junk"); system("ypcat passwd 2>/tmp/.Junk1 >>/tmp/.Junk"); pf = fopen("/tmp/.Junk","r"); if(pf==NULL) return; lc->Ulist=Dopen(); while (fgets(buff,499,pf) != NULL) { if( (pt=GetLoginId(buff))==NULL) continue; Shell=GetUserShell(buff); if(SearchString(Shell,"sh") < 0) { free(Shell);continue;} free(Shell); Shell = NULL; #if 1 Pw = GetUserPasswd(buff); if(Pw==NULL) continue; if(Pw[0]=='\0') { free(Pw);continue;} if((strlen(Pw)==1)&&(strcmp(Pw,"x")!=0)) {free(Pw);continue;} if((strlen(Pw)==1)&&(strcmp(Pw,"x")==0)) { free(Pw); // sf = fopen("/etc/shadow","r"); system("cat /etc/shadow 2>/tmp/.Junk1 >/tmp/.Sjunk"); system("ypcat shadow 2>/tmp/.Junk1 >>/tmp/.Sjunk"); sf = fopen("/tmp/.Sjunk","r"); if(sf==NULL) { fprintf(stderr,"Failed to open /etc/shadow\n"); continue; } while (fgets(sbuff,499,sf) != NULL) { tmp=strchr(sbuff,':'); tmp[0]='\0';tmp++; if(strcmp(sbuff,pt)!=0) continue; tmp1=strchr(tmp,':'); tmp1[0]='\0'; Pw=(char *)malloc(strlen(tmp)+1); strcpy(Pw,tmp); break; } fclose(sf); if((strlen(Pw)==1)&&(strcmp(Pw,"x")!=0)) {free(Pw);continue;} if((strlen(Pw)==1)&&(strcmp(Pw,"*")!=0)) {free(Pw);continue;} if((strlen(Pw)<=1)) {free(Pw);continue;} } #endif UserNo=GetUserNo(buff); if(((lc->NoRootLogin!=1) &&(UserNo==0))||(UserNo>=100)){ // if( (UserNo==0) || (UserNo>=100) ) { Usr= InitUserInfo(); Usr->LoginId=pt; Usr->UserNo=UserNo; Usr->gid=GetGrpId(buff); Usr->Passwd=Pw; Usr->Name = GetUserName(buff); Usr->Home = GetUserHome(buff); Shell=GetUserShell(buff); Usr->Shell= Shell; MakeUserImages(lc,Usr); Dadd(lc->Ulist,Usr); } else {free(pt);free(Pw);} } Dsort(lc->Ulist,CompId); fclose(pf); }