- char tmp[rLen+1];
- vsnprintf(tmp, rLen+1, Right, args);
- addstr(tmp);
- }
-}
-
-// ---------------------
-// --- Coke Protocol ---
-// ---------------------
-int OpenConnection(const char *Host, int Port)
-{
- struct hostent *host;
- struct sockaddr_in serverAddr;
- int sock;
-
- host = gethostbyname(Host);
- if( !host ) {
- fprintf(stderr, "Unable to look up '%s'\n", Host);
- return -1;
- }
-
- memset(&serverAddr, 0, sizeof(serverAddr));
-
- serverAddr.sin_family = AF_INET; // IPv4
- // NOTE: I have a suspicion that IPv6 will play sillybuggers with this :)
- serverAddr.sin_addr.s_addr = *((unsigned long *) host->h_addr_list[0]);
- serverAddr.sin_port = htons(Port);
-
- sock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
- if( sock < 0 ) {
- fprintf(stderr, "Failed to create socket\n");
- return -1;
- }
-
- #if USE_AUTOAUTH
- {
- struct sockaddr_in localAddr;
- memset(&localAddr, 0, sizeof(localAddr));
- localAddr.sin_family = AF_INET; // IPv4
- localAddr.sin_port = 1023; // IPv4
- // Attempt to bind to low port for autoauth
- bind(sock, &localAddr, sizeof(localAddr));
- }
- #endif
-
- if( connect(sock, (struct sockaddr *) &serverAddr, sizeof(serverAddr)) < 0 ) {
- fprintf(stderr, "Failed to connect to server\n");
- return -1;
- }
-
- return sock;
-}
-
-/**
- * \brief Authenticate with the server
- * \return Boolean Failure
- */
-int Authenticate(int Socket)
-{
- struct passwd *pwd;
- char *buf;
- int responseCode;
- char salt[32];
- int i;
- regmatch_t matches[4];
-
- if( gbIsAuthenticated ) return 0;
-
- // Get user name
- pwd = getpwuid( getuid() );
-
- // Attempt automatic authentication
- sendf(Socket, "AUTOAUTH %s\n", pwd->pw_name);
-
- // Check if it worked
- buf = ReadLine(Socket);
-
- responseCode = atoi(buf);
- switch( responseCode )
- {
-
- case 200: // Authenticated, return :)
- gbIsAuthenticated = 1;
- free(buf);
- return 0;
-
- case 401: // Untrusted, attempt password authentication
- free(buf);
-
- sendf(Socket, "USER %s\n", pwd->pw_name);
- printf("Using username %s\n", pwd->pw_name);
-
- buf = ReadLine(Socket);
-
- // TODO: Get Salt
- // Expected format: 100 SALT <something> ...
- // OR : 100 User Set
- RunRegex(&gSaltRegex, buf, 4, matches, "Malformed server response");
- responseCode = atoi(buf);
- if( responseCode != 100 ) {
- fprintf(stderr, "Unknown repsonse code %i from server\n%s\n", responseCode, buf);
- free(buf);
- return -1; // ERROR