inline extern bool_t createDir (char *name) { struct dirEntryStruct *entry; getBlock (currentDir); if (nameValid (name)) { if ((entry = getUnusedEntry())) {// nicht mehr als 256 , da dir nicht mehr ausgibt! if (!getEntryByName (name)) { //alle entrys auch files! if ((entry->startBlock = allocateBlock())) { dirBufferChanged = TRUE; /* set entry */ memcpy (entry->fileName, name, FILE_NAME_SIZE); entry->fileSize = 0; entry->fileType = DIR; entry->readOnly = FALSE; entry->splat = FALSE; { /* init new directory block */ getBlock (entry->startBlock); memset (&dirBuffer, '\0', BLOCKSIZE); dirBuffer.dirEntry[0].startBlock = currentDir; memcpy_P (dirBuffer.dirEntry[0].fileName, PSTR ("."), 3); dirBuffer.dirEntry[0].fileSize = 0; dirBuffer.dirEntry[0].fileType = DIR; dirBuffer.dirEntry[0].readOnly = TRUE; dirBuffer.dirEntry[0].splat = FALSE; dirBufferChanged = TRUE; } flushDirBuffer(); flushFreeBlockList(); return TRUE; } } } } return FALSE; }
inline extern bool_t openWrite (char *name, uint8_t fileType, uint8_t channel) { struct dirEntryStruct *entry; struct channelTableStruct *channelStruct = &channelTable[channel]; if (nameValid (name)) { if (channelStruct->fileState == NO_FILE) { getBlock (currentDir); if (!getEntryByName (name)) { if ((entry = getUnusedEntry())) { /* create first inode */ memset (&(channelStruct->inode), '\0', BLOCKSIZE); if ((channelStruct->inodeBlock = allocateBlock())) { /* set entry */ entry->startBlock = channelStruct->inodeBlock; memcpy (entry->fileName, name, FILE_NAME_SIZE); entry->fileSize = 0; entry->fileType = fileType; entry->splat = TRUE; /* set channel struct */ memcpy (&channelStruct->dirEntry, entry, sizeof (struct dirEntryStruct)); channelStruct->dirBlock = currentDir; channelStruct->inodePtr = 0; /* save entry to disk */ dirBufferChanged = TRUE; flushDirBuffer(); return TRUE; } } } } } return FALSE; }
void newUser(int sd, char *buff) { //TODO: add uniquenick support char sendbuff[512]; char nick[GP_NICK_LEN],email[GP_EMAIL_LEN],pass[GP_PASSWORD_LEN],uniquenick[GP_NICK_LEN]; int userid,profileid; find_param("uniquenick",buff,uniquenick,sizeof(uniquenick)); if(!find_param("nick", buff, nick, sizeof(nick))) { sendError(sd,"Error recieving request"); return; } mysql_real_escape_string(conn,nick,nick,strlen(nick)); if(!find_param("email", buff, email, sizeof(email))) { sendError(sd,"Error recieving request"); return; } mysql_real_escape_string(conn,email,email,strlen(email)); if(!find_param("pass", buff, pass, sizeof(pass))) { if(!find_param("passenc",buff,pass,sizeof(pass))) { sendError(sd,"Error recieving request"); return; } else { char *dpass; int passlen = strlen(pass); dpass = (char *)base64_decode((uint8_t *)pass, &passlen); passlen = gspassenc((uint8_t *)dpass); strcpy(pass,dpass); free(dpass); } } mysql_real_escape_string(conn,pass,pass,strlen(pass)); userid = getUserIDFromEmail(conn,email); if(userid == 0 || !tryPassword(conn,userid,pass)) { formatSend(sd,true,0,"\\nur\\%d",GP_NEWUSER_BAD_PASSWORD); return; } profileid = getProfileIDFromNickEmail(conn, nick, email); if(profileid != 0) { formatSend(sd,true,0,"\\nur\\%d\\pid\\%d",GP_NEWUSER_BAD_NICK,profileid); return; } if(!nameValid(nick,false)) { formatSend(sd,true,0,"\\nur\\%d",GP_NEWUSER_BAD_NICK); return; } if(uniquenick[0] != 0) { profileid = getProfileIDFromUniquenick(conn,uniquenick); if(profileid != 0) { formatSend(sd,true,0,"\\nur\\%d",GP_NEWUSER_UNIQUENICK_INUSE); return; } if(!nameValid(uniquenick,false)) { formatSend(sd,true,0,"\\nur\\%d",GP_NEWUSER_UNIQUENICK_INVALID); return; } } if(uniquenick[0] != 0) { profileid = makeNewProfileWithUniquenick(conn,nick,uniquenick,userid); } else { profileid = makeNewProfile(conn,nick,userid); } if(profileid != 0) { formatSend(sd,true,0,"\\nur\\0\\pid\\%d",profileid); return; } }