1/*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21
22/*
23 * Copyright 2011 Nexenta Systems, Inc.  All rights reserved.
24 * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
25 * Use is subject to license terms.
26 */
27
28#ifndef _SMB_KEYCHAIN_H
29#define	_SMB_KEYCHAIN_H
30
31/*
32 * External interface to the libsmbfs/netsmb keychain
33 * storage mechanism.  This interface is consumed by
34 * the "smbutil" commands: login, logout, ...
35 * and by the SMBFS PAM module.
36 */
37
38#ifdef __cplusplus
39extern "C" {
40#endif
41
42#define	SMB_KEYCHAIN_SUCCESS	0
43#define	SMB_KEYCHAIN_BADPASSWD	300
44#define	SMB_KEYCHAIN_BADDOMAIN	301
45#define	SMB_KEYCHAIN_BADUSER	302
46#define	SMB_KEYCHAIN_NODRIVER	303
47#define	SMB_KEYCHAIN_UNKNOWN	304
48
49/* Add a password to the keychain. */
50int smbfs_keychain_add(uid_t uid, const char *domain, const char *user,
51	const char *password);
52
53/* Add an NT-hash (16-bytes) to the keychain. */
54int smbfs_keychain_addhash(uid_t uid, const char *domain, const char *user,
55	const uchar_t *nthash);
56
57/* Delete a password from the keychain. */
58int smbfs_keychain_del(uid_t uid, const char *domain, const char *user);
59
60/*
61 * Check for existence of a keychain entry.
62 * Returns 0 if it exists, else ENOENT.
63 */
64int smbfs_keychain_chk(const char *domain, const char *user);
65
66/*
67 * Delete all keychain entries owned by the caller.
68 */
69int smbfs_keychain_del_owner(void);
70
71/*
72 * Delete all keychain entries (regardless of owner).
73 * Requires super-user privliege.
74 */
75int smbfs_keychain_del_everyone(void);
76
77/*
78 * This is not really part of the keychain library,
79 * but is typically needed in code that wants to
80 * provide (editable) defaults for domain/user
81 *
82 * Get default domain and user names
83 * Server name is optional.
84 */
85int
86smbfs_default_dom_usr(const char *home, const char *server,
87	char *dom, int maxdom, char *usr, int maxusr);
88
89#ifdef __cplusplus
90}
91#endif
92
93#endif /* _SMB_KEYCHAIN_H */
94