Initial import from FreeBSD RELENG_4:
[dragonfly.git] / crypto / kerberosIV / lib / krb / dllmain.c
1 /*
2  * Copyright (c) 1995, 1996, 1997, 1998 Kungliga Tekniska Högskolan
3  * (Royal Institute of Technology, Stockholm, Sweden).
4  * All rights reserved.
5  * 
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  * 
10  * 1. Redistributions of source code must retain the above copyright
11  *    notice, this list of conditions and the following disclaimer.
12  * 
13  * 2. Redistributions in binary form must reproduce the above copyright
14  *    notice, this list of conditions and the following disclaimer in the
15  *    documentation and/or other materials provided with the distribution.
16  * 
17  * 3. Neither the name of the Institute nor the names of its contributors
18  *    may be used to endorse or promote products derived from this software
19  *    without specific prior written permission.
20  * 
21  * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
22  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
23  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
24  * ARE DISCLAIMED.  IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
25  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
26  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
27  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
28  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
29  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
30  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31  * SUCH DAMAGE.
32  */
33
34 /* dllmain.c - main function to krb4.dll
35  * Author:      J Karlsson <d93-jka@nada.kth.se>
36  * Date:        June 1996
37  */
38
39 #include "krb_locl.h"
40 #include "ticket_memory.h"
41 #include <Windows.h>
42
43 RCSID("$Id: dllmain.c,v 1.9 1999/12/02 16:58:41 joda Exp $");
44
45 void
46 msg(char *text, int error)
47 {
48     char *buf;
49
50     asprintf (&buf, "%s\nAn error of type: %d", text, error);
51
52     MessageBox(GetActiveWindow(),
53                buf ? buf : "Out of memory!",
54                "kerberos message",
55                MB_OK|MB_APPLMODAL);
56     free (buf);
57 }
58
59 void
60 PostUpdateMessage(void)
61 {
62         HWND            hWnd;
63         static UINT km_message;
64         
65     if(km_message == 0)
66         km_message = RegisterWindowMessage("krb4-update-cache");
67
68         hWnd = FindWindow("KrbManagerWndClass", NULL);
69         if (hWnd == NULL)
70                 hWnd = HWND_BROADCAST;
71         PostMessage(hWnd, km_message, 0, 0);
72 }
73
74
75 BOOL WINAPI
76 DllMain (HANDLE hInst, 
77          ULONG reason,
78          LPVOID lpReserved)
79 {
80     WORD wVersionRequested; 
81     WSADATA wsaData; 
82     PROCESS_INFORMATION p;      
83     int err; 
84
85     switch(reason){
86     case DLL_PROCESS_ATTACH:
87         wVersionRequested = MAKEWORD(1, 1); 
88         err = WSAStartup(wVersionRequested, &wsaData); 
89         if (err != 0) 
90         {
91             /* Tell the user that we couldn't find a useable */ 
92             /* winsock.dll.     */ 
93             msg("Cannot find winsock.dll", err);
94             return FALSE;
95         }
96         if(newTktMem(0) != KSUCCESS)
97         {
98             /* Tell the user that we couldn't alloc shared memory. */ 
99             msg("Cannot allocate shared ticket memory", GetLastError());
100             return FALSE;
101         }
102         if(GetLastError() != ERROR_ALREADY_EXISTS)
103         {
104             STARTUPINFO s = {
105                 sizeof(s),
106                 NULL,
107                 NULL,
108                 NULL,
109                 0,0,
110                 0,0,
111                 0,0,
112                 0,
113                 STARTF_USESHOWWINDOW,
114                 SW_SHOWMINNOACTIVE,
115                 0, NULL,
116                 NULL, NULL, NULL
117             };
118
119             if(!CreateProcess(0,"krbmanager",
120                               0,0,FALSE,0,0,
121                               0,&s, &p)) {
122 #if 0
123                 msg("Unable to create Kerberos manager process.\n"
124                     "Make sure krbmanager.exe is in your PATH.",
125                     GetLastError());
126                 return FALSE;
127 #endif
128             }
129         }
130         break;
131     case DLL_PROCESS_DETACH:
132         /* should this really be done here? */
133         freeTktMem(0);
134         WSACleanup();
135         break;
136     }
137
138     return TRUE;
139 }