Merge branch 'master' into jennifer/trp-devel
[trust_router.git] / gsscon / gsscon_active.c
index eb572c8..1f4d91f 100755 (executable)
  * or implied warranty.
  */
 
+#include <stdio.h>
+#include <stdlib.h>
+#include <netdb.h>
+
 #include <gsscon.h>
 
-/* --------------------------------------------------------------------------- */
+/* ---------------------------------------------------------------------------
+*/
 
-int gsscon_connect (const char *inHost, int inPort, const char *inServiceName, int *outFD, gss_ctx_id_t *outGSSContext)
+int gsscon_connect (const char *inHost, unsigned int inPort, const char *inServiceName, int *outFD, gss_ctx_id_t *outGSSContext)
 {
     int err = 0;
     int fd = -1;
     OM_uint32 majorStatus;
-    OM_uint32 minorStatus = 0;
+    OM_uint32 minorStatus = 0, minorStatusToo = 0;
     struct hostent *hp = NULL;
     struct sockaddr_in saddr;
     gss_name_t serviceName = NULL;
@@ -74,13 +79,14 @@ int gsscon_connect (const char *inHost, int inPort, const char *inServiceName, i
     gss_buffer_desc inputToken;  /* buffer received from the server */
     gss_buffer_desc nameBuffer;
     gss_buffer_t inputTokenPtr = GSS_C_NO_BUFFER;
+    char *name;
 
     if (!inServiceName) { err = EINVAL; }
     if (!outGSSContext) { err = EINVAL; }
     
     if (!err) {
         hp = gethostbyname (inHost);
-        if (hp == NULL) { err = errno; }
+        if (hp == NULL) { err = h_errno; }
     }
     
     if (!err) {
@@ -93,16 +99,16 @@ int gsscon_connect (const char *inHost, int inPort, const char *inServiceName, i
     }
     
     if (!err) {
+        fprintf (stderr, "gss_connect: Connecting to host '%s' on port %d\n", inHost, inPort);
         err = connect (fd, (struct sockaddr *) &saddr, sizeof (saddr));
         if (err < 0) { err = errno; }
     }
     
     if (!err) {
-        printf ("connecting to host '%s' on port %d\n", inHost, inPort);
         *outFD = fd;
         fd = -1; /* takes ownership */
     } else {
-         gsscon_print_error (err, "OpenConnection failed");
+        gsscon_print_error (err, "OpenConnection failed");
     }
     
     if (fd >= 0) { close (fd); }
@@ -168,7 +174,7 @@ int gsscon_connect (const char *inHost, int inPort, const char *inServiceName, i
       nameBuffer.length = asprintf(&name, "%s@%s", inServiceName, inHost);
       nameBuffer.value = name;
 
-      majorStatus = gss_import_name (&minorStatus, &nameBuffer, (gss_OID) GSS_KRB5_NT_PRINCIPAL_NAME, &serviceName); 
+      majorStatus = gss_import_name (&minorStatus, &nameBuffer, (gss_OID) GSS_C_NT_HOSTBASED_SERVICE, &serviceName); 
       if (majorStatus != GSS_S_COMPLETE) { 
        gsscon_print_gss_errors ("gss_import_name(inServiceName)", majorStatus, minorStatus);
        err = minorStatus ? minorStatus : majorStatus; 
@@ -194,7 +200,6 @@ int gsscon_connect (const char *inHost, int inPort, const char *inServiceName, i
         OM_uint32 requestedFlags = (GSS_C_MUTUAL_FLAG | GSS_C_REPLAY_FLAG | GSS_C_SEQUENCE_FLAG | 
                                     GSS_C_CONF_FLAG | GSS_C_INTEG_FLAG);
         
-       // printf ("Calling gss_init_sec_context...\n");
         majorStatus = gss_init_sec_context (&minorStatus, 
                                             clientCredentials, 
                                             &gssContext, 
@@ -214,7 +219,7 @@ int gsscon_connect (const char *inHost, int inPort, const char *inServiceName, i
             err = gsscon_write_token (*outFD, outputToken.value, outputToken.length);
             
             /* free the output token */
-            gss_release_buffer (&minorStatus, &outputToken);
+            gss_release_buffer (&minorStatusToo, &outputToken);
         }
         
         if (!err) {