summaryrefslogtreecommitdiff
path: root/usr/src/lib/smbsrv/libsmb/common/smb_scfutil.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/lib/smbsrv/libsmb/common/smb_scfutil.c')
-rw-r--r--usr/src/lib/smbsrv/libsmb/common/smb_scfutil.c377
1 files changed, 1 insertions, 376 deletions
diff --git a/usr/src/lib/smbsrv/libsmb/common/smb_scfutil.c b/usr/src/lib/smbsrv/libsmb/common/smb_scfutil.c
index 1f5083f448..4460e70154 100644
--- a/usr/src/lib/smbsrv/libsmb/common/smb_scfutil.c
+++ b/usr/src/lib/smbsrv/libsmb/common/smb_scfutil.c
@@ -19,7 +19,7 @@
* CDDL HEADER END
*/
/*
- * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -60,95 +60,6 @@ smb_smf_scf_log_error(char *msg)
}
/*
- * Check if instance with given name exists for a service.
- * Returns 0 is instance exist
- */
-int
-smb_smf_instance_exists(smb_scfhandle_t *handle, char *inst_name)
-{
- int ret = SMBD_SMF_OK;
- if (handle == NULL)
- return (SMBD_SMF_SYSTEM_ERR);
-
- handle->scf_instance = scf_instance_create(handle->scf_handle);
- if (scf_service_get_instance(handle->scf_service, inst_name,
- handle->scf_instance) != SCF_SUCCESS)
- ret = SMBD_SMF_SYSTEM_ERR;
-
- scf_instance_destroy(handle->scf_instance);
- handle->scf_instance = NULL;
- return (ret);
-}
-
-/*
- * Create a service instance. returns 0 if successful.
- * If instance already exists enable it.
- */
-int
-smb_smf_instance_create(smb_scfhandle_t *handle, char *serv_prefix,
- char *inst_name)
-{
- char *instance;
- int ret = SMBD_SMF_OK;
- int sz;
-
- if (handle == NULL)
- return (SMBD_SMF_SYSTEM_ERR);
-
- if (!serv_prefix || !inst_name)
- return (SMBD_SMF_SYSTEM_ERR);
-
- sz = strlen(serv_prefix) + strlen(inst_name) + 2;
- instance = malloc(sz);
- if (!instance)
- return (SMBD_SMF_NO_MEMORY);
-
- (void) snprintf(instance, sz, "%s:%s", serv_prefix, inst_name);
- handle->scf_instance = scf_instance_create(handle->scf_handle);
- if (scf_service_get_instance(handle->scf_service, inst_name,
- handle->scf_instance) != SCF_SUCCESS) {
- if (scf_service_add_instance(handle->scf_service,
- inst_name, handle->scf_instance) == SCF_SUCCESS) {
- if (smf_enable_instance(instance, 0))
- ret = SMBD_SMF_SYSTEM_ERR;
- } else {
- ret = SMBD_SMF_SYSTEM_ERR;
- }
- } else {
- if (smf_enable_instance(instance, 0))
- ret = SMBD_SMF_SYSTEM_ERR;
- }
- free(instance);
- return (ret);
-}
-
-/*
- * Delete a specified instance. Return SMBD_SMF_OK for success.
- */
-int
-smb_smf_instance_delete(smb_scfhandle_t *handle, char *inst_name)
-{
- int ret = SMBD_SMF_OK;
-
- if (handle == NULL)
- return (SMBD_SMF_SYSTEM_ERR);
-
- handle->scf_instance = scf_instance_create(handle->scf_handle);
- if (scf_service_get_instance(handle->scf_service, inst_name,
- handle->scf_instance) == SCF_SUCCESS) {
- if (scf_instance_delete(handle->scf_instance) == SCF_SUCCESS) {
- return (ret);
- } else {
- ret = SMBD_SMF_SYSTEM_ERR;
- }
- } else {
- smb_smf_scf_log_error(NULL);
- ret = SMBD_SMF_SYSTEM_ERR;
- }
- return (ret);
-}
-
-/*
* smb_smf_create_service_pgroup(handle, pgroup)
*
* create a new property group at service level.
@@ -196,152 +107,6 @@ smb_smf_create_service_pgroup(smb_scfhandle_t *handle, char *pgroup)
}
/*
- * smb_smf_create_instance_pgroup(handle, pgroup)
- *
- * create a new property group at instance level.
- */
-int
-smb_smf_create_instance_pgroup(smb_scfhandle_t *handle, char *pgroup)
-{
- int ret = SMBD_SMF_OK;
- int err;
-
- if (handle == NULL) {
- return (SMBD_SMF_SYSTEM_ERR);
- }
-
- /*
- * only create a handle if it doesn't exist. It is ok to exist
- * since the pg handle will be set as a side effect.
- */
- if (handle->scf_pg == NULL)
- handle->scf_pg = scf_pg_create(handle->scf_handle);
-
- /*
- * if the pgroup exists, we are done. If it doesn't, then we
- * need to actually add one to the service instance.
- */
- if (scf_instance_get_pg(handle->scf_instance,
- pgroup, handle->scf_pg) != 0) {
- /* doesn't exist so create one */
- if (scf_instance_add_pg(handle->scf_instance, pgroup,
- SCF_GROUP_FRAMEWORK, 0, handle->scf_pg) != 0) {
- err = scf_error();
- if (err != SCF_ERROR_NONE)
- smb_smf_scf_log_error(NULL);
- switch (err) {
- case SCF_ERROR_PERMISSION_DENIED:
- ret = SMBD_SMF_NO_PERMISSION;
- break;
- default:
- ret = SMBD_SMF_SYSTEM_ERR;
- break;
- }
- }
- }
- return (ret);
-}
-
-/*
- * smb_smf_delete_service_pgroup(handle, pgroup)
- *
- * remove the property group from the current service.
- * but only if it actually exists.
- */
-int
-smb_smf_delete_service_pgroup(smb_scfhandle_t *handle, char *pgroup)
-{
- int ret = SMBD_SMF_OK;
- int err;
-
- if (handle == NULL) {
- return (SMBD_SMF_SYSTEM_ERR);
- }
-
- /*
- * only create a handle if it doesn't exist. It is ok to exist
- * since the pg handle will be set as a side effect.
- */
- if (handle->scf_pg == NULL)
- handle->scf_pg = scf_pg_create(handle->scf_handle);
-
- /*
- * only delete if it does exist.
- */
- if (scf_service_get_pg(handle->scf_service,
- pgroup, handle->scf_pg) == 0) {
- /* does exist so delete it */
- if (scf_pg_delete(handle->scf_pg) != 0) {
- ret = SMBD_SMF_SYSTEM_ERR;
- err = scf_error();
- if (err != SCF_ERROR_NONE) {
- smb_smf_scf_log_error("SMF delpg "
- "problem: %s\n");
- }
- }
- } else {
- err = scf_error();
- if (err != SCF_ERROR_NONE)
- smb_smf_scf_log_error("SMF getpg problem: %s\n");
- ret = SMBD_SMF_SYSTEM_ERR;
- }
- if (ret == SMBD_SMF_SYSTEM_ERR &&
- scf_error() == SCF_ERROR_PERMISSION_DENIED) {
- ret = SMBD_SMF_NO_PERMISSION;
- }
- return (ret);
-}
-
-/*
- * smb_smf_delete_instance_pgroup(handle, pgroup)
- *
- * remove the property group from the current instance.
- * but only if it actually exists.
- */
-int
-smb_smf_delete_instance_pgroup(smb_scfhandle_t *handle, char *pgroup)
-{
- int ret = SMBD_SMF_OK;
- int err;
-
- if (handle == NULL)
- return (SMBD_SMF_SYSTEM_ERR);
-
- /*
- * only create a handle if it doesn't exist. It is ok to exist
- * since the pg handle will be set as a side effect.
- */
- if (handle->scf_pg == NULL)
- handle->scf_pg = scf_pg_create(handle->scf_handle);
-
- /*
- * only delete if it does exist.
- */
- if (scf_instance_get_pg(handle->scf_instance,
- pgroup, handle->scf_pg) == 0) {
- /* does exist so delete it */
- if (scf_pg_delete(handle->scf_pg) != 0) {
- ret = SMBD_SMF_SYSTEM_ERR;
- err = scf_error();
- if (err != SCF_ERROR_NONE) {
- smb_smf_scf_log_error("SMF delpg "
- "problem: %s\n");
- }
- }
- } else {
- err = scf_error();
- if (err != SCF_ERROR_NONE)
- smb_smf_scf_log_error("SMF getpg problem: %s\n");
- ret = SMBD_SMF_SYSTEM_ERR;
- }
- if (ret == SMBD_SMF_SYSTEM_ERR &&
- scf_error() == SCF_ERROR_PERMISSION_DENIED)
- ret = SMBD_SMF_NO_PERMISSION;
-
- return (ret);
-}
-
-/*
* Start transaction on current pg in handle.
* The pg could be service or instance level.
* Must be called after pg handle is obtained
@@ -413,49 +178,6 @@ smb_smf_end_transaction(smb_scfhandle_t *handle)
}
/*
- * Deletes property in current pg
- */
-int
-smb_smf_delete_property(smb_scfhandle_t *handle, char *propname)
-{
- int ret = SMBD_SMF_OK;
- scf_transaction_entry_t *entry = NULL;
-
- if (handle == NULL)
- return (SMBD_SMF_SYSTEM_ERR);
-
- /*
- * properties must be set in transactions and don't take
- * effect until the transaction has been ended/committed.
- */
- entry = scf_entry_create(handle->scf_handle);
- if (entry != NULL) {
- if (scf_transaction_property_delete(handle->scf_trans, entry,
- propname) != 0) {
- ret = SMBD_SMF_SYSTEM_ERR;
- }
- } else {
- ret = SMBD_SMF_SYSTEM_ERR;
- }
- if (ret == SMBD_SMF_SYSTEM_ERR) {
- switch (scf_error()) {
- case SCF_ERROR_PERMISSION_DENIED:
- ret = SMBD_SMF_NO_PERMISSION;
- break;
- }
- }
-
- /*
- * cleanup if there were any errors that didn't leave these
- * values where they would be cleaned up later.
- */
- if ((ret != SMBD_SMF_OK) && (entry != NULL))
- scf_entry_destroy(entry);
-
- return (ret);
-}
-
-/*
* Sets string property in current pg
*/
int
@@ -843,103 +565,6 @@ smb_smf_get_opaque_property(smb_scfhandle_t *handle, char *propname,
}
/*
- * Get property based on property type. Returns string value of that
- * property. Only SCF_TYPE_ASTRING, SCF_TYPE_INTEGER, SCF_TYPE_BOOLEAN
- * supported.
- */
-int
-smb_smf_get_property(smb_scfhandle_t *handle, int proptype, char *propname,
- char *valstr, size_t sz)
-{
- int64_t valint = 0;
- uint8_t valbool = 0;
- int ret = SMBD_SMF_OK;
-
- switch (proptype) {
- case SCF_TYPE_ASTRING:
- ret = smb_smf_get_string_property(handle, propname,
- valstr, sz);
- break;
- case SCF_TYPE_INTEGER:
- if ((ret = smb_smf_get_integer_property(handle, propname,
- &valint)) != 0)
- return (ret);
- (void) snprintf(valstr, sz, "%lld", valint);
- break;
- case SCF_TYPE_BOOLEAN:
- if ((ret = smb_smf_get_boolean_property(handle, propname,
- &valbool)) != 0)
- return (ret);
- (void) strlcpy(valstr, (valbool ? "true" : "false"), sz);
- break;
- default:
- return (SMBD_SMF_SYSTEM_ERR);
- }
- return (ret);
-}
-
-/*
- * Set property based on property type.
- * Only SCF_TYPE_ASTRING, SCF_TYPE_INTEGER, SCF_TYPE_BOOLEAN supported.
- */
-int
-smb_smf_set_property(smb_scfhandle_t *handle, int proptype,
- char *propname, char *valstr)
-{
- int64_t valint = 0;
- uint8_t valbool = 0;
- int ret = SMBD_SMF_OK;
-
- switch (proptype) {
- case SCF_TYPE_ASTRING:
- ret = smb_smf_set_string_property(handle, propname,
- valstr);
- break;
- case SCF_TYPE_INTEGER:
- valint = strtol(valstr, 0, 10);
- ret = smb_smf_set_integer_property(handle, propname,
- valint);
- break;
- case SCF_TYPE_BOOLEAN:
- if (strcasecmp(valstr, "true") == 0)
- valbool = 1;
- ret = smb_smf_set_boolean_property(handle, propname, valbool);
- break;
- default:
- return (SMBD_SMF_SYSTEM_ERR);
- }
- return (ret);
-}
-
-/*
- * Gets an instance iterator for the service specified.
- */
-smb_scfhandle_t *
-smb_smf_get_iterator(char *svc_name)
-{
- smb_scfhandle_t *handle = NULL;
-
- handle = smb_smf_scf_init(svc_name);
- if (!handle)
- return (NULL);
-
- handle->scf_inst_iter = scf_iter_create(handle->scf_handle);
- if (handle->scf_inst_iter) {
- if (scf_iter_service_instances(handle->scf_inst_iter,
- handle->scf_service) != 0) {
- smb_smf_scf_fini(handle);
- handle = NULL;
- } else {
- handle->scf_instance = NULL;
- }
- } else {
- smb_smf_scf_fini(handle);
- handle = NULL;
- }
- return (handle);
-}
-
-/*
* smb_smf_scf_init()
*
* must be called before using any of the SCF functions.