smb_lgrp.c revision c8ec8eea9849cac239663c46be8a7f5d2ba7ca00
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * CDDL HEADER START
3e14f97f673e8a630f076077de35afdd43dc1587Roger A. Faulkner * The contents of this file are subject to the terms of the
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * Common Development and Distribution License (the "License").
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * You may not use this file except in compliance with the License.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * See the License for the specific language governing permissions
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * and limitations under the License.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * When distributing Covered Code, include this CDDL HEADER in each
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * If applicable, add the following below this CDDL HEADER, with the
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * fields enclosed by brackets "[]" replaced with your own identifying
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * information: Portions Copyright [yyyy] [name of copyright owner]
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * CDDL HEADER END
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * Use is subject to license terms.
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin#pragma ident "@(#)smb_lgrp.c 1.5 08/07/29 SMI"
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * Local domain SID (aka machine SID) is not stored in the domain table
da2e3ebdc1edfbc5028edf1354e7dd2fa69a7968chin * therefore the index is 0
#define SMB_LGRP_DB_SQL \
#define SMB_LGRP_GTBL_NAME 0
typedef struct smb_lgmid {
} smb_lgmid_t;
typedef struct smb_lgmlist {
char *m_ids;
typedef struct smb_lgplist {
static int smb_lgrp_db_init(void);
int rc;
return (SMB_LGRP_INVALID_NAME);
return (SMB_LGRP_INVALID_ARG);
return (SMB_LGRP_NOT_FOUND);
!= IDMAP_SUCCESS)
return (SMB_LGRP_NO_SID);
return (SMB_LGRP_SID_NOTLOCAL);
return (SMB_LGRP_WKSID);
return (SMB_LGRP_NO_MEMORY);
return (rc);
int rc;
return (SMB_LGRP_INVALID_NAME);
return (SMB_LGRP_INVALID_NAME);
return (SMB_LGRP_SUCCESS);
return (SMB_LGRP_WKSID);
return (SMB_LGRP_WKSID);
return (rc);
int rc;
return (SMB_LGRP_INVALID_NAME);
return (SMB_LGRP_WKSID);
return (rc);
int rc;
return (SMB_LGRP_INVALID_NAME);
return (SMB_LGRP_INVALID_ARG);
return (rc);
int rc;
return (SMB_LGRP_INVALID_NAME);
return (SMB_LGRP_INVALID_ARG);
return (rc);
int rc;
return (SMB_LGRP_INVALID_NAME);
return (SMB_LGRP_NO_SUCH_PRIV);
if (enable) {
return (rc);
int rc;
return (SMB_LGRP_INVALID_NAME);
return (SMB_LGRP_NO_SUCH_PRIV);
return (rc);
int rc;
return (SMB_LGRP_INVALID_NAME);
return (SMB_LGRP_INVALID_ARG);
return (SMB_LGRP_INVALID_MEMBER);
return (rc);
int rc;
return (SMB_LGRP_INVALID_NAME);
return (SMB_LGRP_INVALID_ARG);
return (rc);
int rc;
return (SMB_LGRP_INVALID_NAME);
return (rc);
int rc;
return (rc);
int dom_idx;
int rc;
switch (dom_type) {
case SMB_LGRP_LOCAL:
case SMB_LGRP_BUILTIN:
*count = 0;
return (SMB_LGRP_INVALID_ARG);
return (rc);
int rc;
*count = 0;
return (rc);
(*count)++;
return (SMB_LGRP_SUCCESS);
char *sql;
return (SMB_LGRP_NO_MEMORY);
return (SMB_LGRP_DBOPEN_FAILED);
return (rc);
int rc;
const char **values;
int ncol;
int rc;
return (SMB_LGRP_INVALID_ARG);
return (SMB_LGRP_NO_MORE);
return (SMB_LGRP_DBEXEC_FAILED);
return (SMB_LGRP_DB_ERROR);
for (i = 0; i < ncol; i++) {
return (SMB_LGRP_DB_ERROR);
return (B_FALSE);
return (B_TRUE);
return (B_FALSE);
switch (errno) {
case SMB_LGRP_SUCCESS:
case SMB_LGRP_INVALID_ARG:
case SMB_LGRP_INVALID_MEMBER:
case SMB_LGRP_INVALID_NAME:
case SMB_LGRP_NOT_FOUND:
case SMB_LGRP_EXISTS:
case SMB_LGRP_NO_SID:
case SMB_LGRP_NO_LOCAL_SID:
case SMB_LGRP_SID_NOTLOCAL:
case SMB_LGRP_WKSID:
case SMB_LGRP_NO_MEMORY:
case SMB_LGRP_DB_ERROR:
case SMB_LGRP_DBINIT_ERROR:
case SMB_LGRP_INTERNAL_ERROR:
case SMB_LGRP_MEMBER_IN_GROUP:
case SMB_LGRP_NO_SUCH_PRIV:
case SMB_LGRP_NO_SUCH_DOMAIN:
case SMB_LGRP_PRIV_HELD:
case SMB_LGRP_PRIV_NOT_HELD:
case SMB_LGRP_BAD_DATA:
case SMB_LGRP_NO_MORE:
case SMB_LGRP_DBOPEN_FAILED:
case SMB_LGRP_DBEXEC_FAILED:
case SMB_LGRP_DBINIT_FAILED:
case SMB_LGRP_DOMLKP_FAILED:
case SMB_LGRP_DOMINS_FAILED:
case SMB_LGRP_INSERT_FAILED:
case SMB_LGRP_DELETE_FAILED:
case SMB_LGRP_UPDATE_FAILED:
case SMB_LGRP_LOOKUP_FAILED:
static boolean_t
smb_lgrp_start(void)
char *supported_bg[] =
char *lsid_str;
return (SMB_LGRP_NO_LOCAL_SID);
return (SMB_LGRP_NO_LOCAL_SID);
return (rc);
for (i = 0; i < ngrp; i++) {
return (SMB_LGRP_SUCCESS);
smb_lgrp_stop(void)
static sqlite *
return (db);
if (db) {
smb_lgrp_db_init(void)
return (SMB_LGRP_DBOPEN_FAILED);
return (SMB_LGRP_DBEXEC_FAILED);
case SQLITE_ERROR:
&errmsg);
case SQLITE_OK:
&errmsg);
NULL);
return (rc);
&errmsg);
return (rc);
char *sql;
char **result;
return (SMB_LGRP_DBOPEN_FAILED);
switch (key) {
case SMB_LGRP_GTBL_NAME:
case SMB_LGRP_GTBL_SIDRID:
return (rc);
return (SMB_LGRP_INVALID_ARG);
return (SMB_LGRP_NO_MEMORY);
return (SMB_LGRP_LOOKUP_FAILED);
if (nrow == 0) {
return (SMB_LGRP_NOT_FOUND);
return (SMB_LGRP_DB_ERROR);
return (rc);
static boolean_t
char *sql;
char **result;
int rc;
return (NULL);
gname);
return (B_FALSE);
return (nrow != 0);
char *sql;
char **result;
int rc;
*count = 0;
return (SMB_LGRP_DBOPEN_FAILED);
dom_idx);
return (SMB_LGRP_LOOKUP_FAILED);
return (SMB_LGRP_DB_ERROR);
return (SMB_LGRP_SUCCESS);
char *sql;
int dom_idx;
int rc;
return (SMB_LGRP_DBOPEN_FAILED);
return (SMB_LGRP_NO_MEMORY);
return (rc);
char *sql;
int rc;
return (SMB_LGRP_DBOPEN_FAILED);
return (SMB_LGRP_NO_MEMORY);
return (rc);
char *sql;
int rc;
return (SMB_LGRP_DBOPEN_FAILED);
return (SMB_LGRP_NOT_FOUND);
switch (col_id) {
case SMB_LGRP_GTBL_NAME:
return (SMB_LGRP_EXISTS);
case SMB_LGRP_GTBL_CMNT:
return (SMB_LGRP_INVALID_ARG);
return (SMB_LGRP_NO_MEMORY);
return (rc);
int flags)
char *sql;
char **result;
int rc;
return (SMB_LGRP_DBOPEN_FAILED);
return (SMB_LGRP_NO_MEMORY);
return (SMB_LGRP_LOOKUP_FAILED);
if (nrow == 0) {
return (SMB_LGRP_NOT_FOUND);
return (SMB_LGRP_DB_ERROR);
return (rc);
switch (flags) {
case SMB_LGRP_DB_ADDMEMBER:
case SMB_LGRP_DB_DELMEMBER:
return (rc);
return (SMB_LGRP_NO_MEMORY);
return (rc);
char *sql;
char **result;
int rc;
return (SMB_LGRP_DBOPEN_FAILED);
return (SMB_LGRP_NO_MEMORY);
return (SMB_LGRP_LOOKUP_FAILED);
if (nrow == 0) {
return (SMB_LGRP_NOT_FOUND);
return (SMB_LGRP_DB_ERROR);
if (enable)
return (rc);
gname);
return (SMB_LGRP_NO_MEMORY);
return (rc);
char *sql;
int rc;
return (SMB_LGRP_NO_MEMORY);
return (SMB_LGRP_DOMINS_FAILED);
if (dom_idx)
return (SMB_LGRP_SUCCESS);
char **result;
char *sql;
int rc;
return (SMB_LGRP_INTERNAL_ERROR);
return (SMB_LGRP_SUCCESS);
return (SMB_LGRP_NO_MEMORY);
sidstr);
return (SMB_LGRP_NO_MEMORY);
return (SMB_LGRP_DOMLKP_FAILED);
switch (nrow) {
return (SMB_LGRP_SUCCESS);
return (SMB_LGRP_DB_ERROR);
char **result;
char *sql;
int rc;
dom_idx);
return (SMB_LGRP_NO_MEMORY);
return (SMB_LGRP_DOMLKP_FAILED);
switch (nrow) {
return (rc);
char *sql;
int rc;
return (SMB_LGRP_NO_MEMORY);
return (rc);
char *in_list;
char *out_list;
int in_size;
int out_size;
int mid_hexsz;
return (SMB_LGRP_MEMBER_IN_GROUP);
return (SMB_LGRP_NO_MEMORY);
return (SMB_LGRP_SUCCESS);
char *in_list;
char *out_list;
int in_size;
int out_size;
int mid_hexsz;
int out_cnt;
return (SMB_LGRP_MEMBER_NOT_IN_GROUP);
return (SMB_LGRP_NO_MEMORY);
out_cnt++;
return (SMB_LGRP_MEMBER_NOT_IN_GROUP);
return (SMB_LGRP_SUCCESS);
int i, size;
return (SMB_LGRP_PRIV_HELD);
return (SMB_LGRP_NO_MEMORY);
return (SMB_LGRP_SUCCESS);
int i, size;
return (SMB_LGRP_PRIV_NOT_HELD);
return (SMB_LGRP_NO_MEMORY);
return (SMB_LGRP_PRIV_NOT_HELD);
return (SMB_LGRP_SUCCESS);
assert(0);
return (SMB_LGRP_BAD_DATA);
return (SMB_LGRP_NO_MEMORY);
return (SMB_LGRP_SUCCESS);
int m_num;
int mids_size;
int i, rc;
return (SMB_LGRP_NO_MEMORY);
return (SMB_LGRP_NO_MEMORY);
return (rc);
return (SMB_LGRP_SUCCESS);
int rc;
return (SMB_LGRP_SUCCESS);
return (SMB_LGRP_NO_MEMORY);
return (SMB_LGRP_NO_MEMORY);
return (SMB_LGRP_NO_MEMORY);
return (rc);
return (rc);
return (SMB_LGRP_SUCCESS);
static boolean_t
static char *invalid_chars =
int len, i;
return (B_FALSE);
return (B_FALSE);
return (B_FALSE);
for (i = 0; i < len; i++)
return (B_FALSE);
return (B_TRUE);
int id_type;
int rc;
return (SMB_LGRP_NO_SID);
return (SMB_LGRP_SID_NOTLOCAL);
return (SMB_LGRP_SUCCESS);
return (SMB_LGRP_DB_ERROR);
return (SMB_LGRP_NO_MEMORY);
return (SMB_LGRP_SUCCESS);
int idtype;
int rc;
return (SMB_LGRP_NO_MEMORY);