]> andersk Git - gssapi-openssh.git/blobdiff - openssh/openbsd-compat/bsd-cygwin_util.c
Import of OpenSSH 3.1p1
[gssapi-openssh.git] / openssh / openbsd-compat / bsd-cygwin_util.c
index f5133319650c6e85ba264b6dd9d8337509618408..f56ad7c5b4c6857520321326769a5b3caabae71c 100644 (file)
@@ -58,7 +58,7 @@ int binary_pipe(int fd[2])
        return ret;
 }
 
-int check_nt_auth(int pwd_authenticated, uid_t uid)
+int check_nt_auth(int pwd_authenticated, struct passwd *pw)
 {
        /*
        * The only authentication which is able to change the user
@@ -73,6 +73,8 @@ int check_nt_auth(int pwd_authenticated, uid_t uid)
        */
        static int has_create_token = -1;
 
+       if (pw == NULL)
+               return 0;
        if (is_winnt) {
                if (has_create_token < 0) {
                        struct utsname uts;
@@ -90,7 +92,7 @@ int check_nt_auth(int pwd_authenticated, uid_t uid)
                        }
                }
                if (has_create_token < 1 &&
-                   !pwd_authenticated && geteuid() != uid)
+                   !pwd_authenticated && geteuid() != pw->pw_uid)
                        return 0;
        }
        return 1;
@@ -139,4 +141,26 @@ int check_ntsec(const char *filename)
        return 0;
 }
 
+void register_9x_service(void)
+{
+        HINSTANCE kerneldll;
+        DWORD (*RegisterServiceProcess)(DWORD, DWORD);
+
+       /* The service register mechanism in 9x/Me is pretty different from
+        * NT/2K/XP.  In NT/2K/XP we're using a special service starter
+        * application to register and control sshd as service.  This method
+        * doesn't play nicely with 9x/Me.  For that reason we register here
+        * as service when running under 9x/Me.  This function is only called
+        * by the child sshd when it's going to daemonize.
+        */
+       if (is_winnt)
+               return;
+       if (! (kerneldll = LoadLibrary("KERNEL32.DLL")))
+               return;
+       if (! (RegisterServiceProcess = (DWORD (*)(DWORD, DWORD))
+                         GetProcAddress(kerneldll, "RegisterServiceProcess")))
+               return;
+       RegisterServiceProcess(0, 1);
+}
+
 #endif /* HAVE_CYGWIN */
This page took 0.08154 seconds and 4 git commands to generate.