X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;ds=sidebyside;f=server%2Fsrc%2Fserver.c;h=6bf0434dd83fedd0c2a8ef2b4d472c3ad2407566;hb=a189b749e46348379d2271eb7c51ca1f7334cbda;hp=e7dbc7078f0513dba01ac022026e641d96287b68;hpb=0411e351ae868dee5d00049d866defdf62108598;p=tpg%2Fopendispense2.git diff --git a/server/src/server.c b/server/src/server.c index e7dbc70..6bf0434 100644 --- a/server/src/server.c +++ b/server/src/server.c @@ -241,7 +241,7 @@ char *Server_ParseClientCommand(tClient *Client, char *CommandString) return gaServer_Commands[i].Function(Client, args); } - return strdup("400 Unknown Command\n"); + return strdup("400 Unknown Command\n"); } // --- @@ -328,7 +328,7 @@ char *Server_Cmd_AUTOAUTH(tClient *Client, char *Args) // Get UID Client->UID = GetUserID( Args ); - if( Client->UID <= 0 ) { + if( Client->UID < 0 ) { if(giDebugLevel) printf("Client %i: Unknown user '%s'\n", Client->ID, Args); return strdup("401 Auth Failure\n"); @@ -374,3 +374,46 @@ void HexBin(uint8_t *Dest, char *Src, int BufSize) for( ; i < BufSize; i++ ) Dest[i] = 0; } + +/** + * \brief Decode a Base64 value + */ +int UnBase64(uint8_t *Dest, char *Src, int BufSize) +{ + uint32_t val; + int i, j; + char *start_src = Src; + + for( i = 0; i+2 < BufSize; i += 3 ) + { + val = 0; + for( j = 0; j < 4; j++, Src ++ ) { + if('A' <= *Src && *Src <= 'Z') + val |= (*Src - 'A') << ((3-j)*6); + else if('a' <= *Src && *Src <= 'z') + val |= (*Src - 'a' + 26) << ((3-j)*6); + else if('0' <= *Src && *Src <= '9') + val |= (*Src - '0' + 52) << ((3-j)*6); + else if(*Src == '+') + val |= 62 << ((3-j)*6); + else if(*Src == '/') + val |= 63 << ((3-j)*6); + else if(!*Src) + break; + else if(*Src != '=') + j --; // Ignore invalid characters + } + Dest[i ] = (val >> 16) & 0xFF; + Dest[i+1] = (val >> 8) & 0xFF; + Dest[i+2] = val & 0xFF; + if(j != 4) break; + } + + // Finish things off + if(i < BufSize) + Dest[i] = (val >> 16) & 0xFF; + if(i+1 < BufSize) + Dest[i+1] = (val >> 8) & 0xFF; + + return Src - start_src; +}