chiark / gitweb /
some todos
[inn-innduct.git] / authprogs / auth_smb.c
1 /*
2  * Samba authenticator.
3  * usage: auth_smb <server> [<backup_server>] <domain>
4  *
5  * Heavily based on:
6  * pam_smb -- David Airlie 1998-2000 v1.1.6 <airlied@samba.org>
7  * http://www.csn.ul.ie/~airlied
8  *
9  * Written 2000 October by Krischan Jodies <krischan@jodies.cx>
10  * 
11  */
12
13 #include "config.h"
14 #include "clibrary.h"
15 #include "inn/messages.h"
16
17 #include "libauth.h"
18 #include "smbval/valid.h"
19
20 int
21 main(int argc, char *argv[])
22 {
23     struct auth_info *authinfo;
24     int result;
25     char *server, *backup, *domain;
26
27     message_program_name = "auth_smb";
28
29     if ((argc > 4) || (argc < 3))
30         die("wrong number of arguments"
31             " (auth_smb <server> [<backup-server>] <domain>");
32
33     authinfo = get_auth_info(stdin);
34     if (authinfo == NULL)
35         die("no user information provided by nnrpd");
36
37     /* Got a username and password.  Now check to see if they're valid. */
38     server = argv[1];
39     backup = (argc > 3) ? argv[2] : argv[1];
40     domain = (argc > 3) ? argv[3] : argv[2];
41     result = Valid_User(authinfo->username, authinfo->password, server,
42                         backup, domain);
43
44     /* Analyze the result. */
45     switch (result) {
46     case NTV_NO_ERROR:
47         printf("User:%s\n", authinfo->username);
48         exit(0);
49         break;
50     case NTV_SERVER_ERROR:
51         die("server error");
52         break;
53     case NTV_PROTOCOL_ERROR:
54         die("protocol error");
55         break;
56     case NTV_LOGON_ERROR:
57         die("logon error");
58         break;
59     default:
60         die("unknown error");
61         break;
62     }
63
64     /* Never reached. */
65     return 1;
66 }