Blame library/adprivate.h

Packit Service 6d40f9
/*
Packit Service 6d40f9
 * adcli
Packit Service 6d40f9
 *
Packit Service 6d40f9
 * Copyright (C) 2012 Red Hat Inc.
Packit Service 6d40f9
 *
Packit Service 6d40f9
 * This program is free software; you can redistribute it and/or modify
Packit Service 6d40f9
 * it under the terms of the GNU Lesser General Public License as
Packit Service 6d40f9
 * published by the Free Software Foundation; either version 2.1 of
Packit Service 6d40f9
 * the License, or (at your option) any later version.
Packit Service 6d40f9
 *
Packit Service 6d40f9
 * This program is distributed in the hope that it will be useful, but
Packit Service 6d40f9
 * WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 6d40f9
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit Service 6d40f9
 * Lesser General Public License for more details.
Packit Service 6d40f9
 *
Packit Service 6d40f9
 * You should have received a copy of the GNU Lesser General Public
Packit Service 6d40f9
 * License along with this program; if not, write to the Free Software
Packit Service 6d40f9
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
Packit Service 6d40f9
 * MA 02110-1301 USA
Packit Service 6d40f9
 *
Packit Service 6d40f9
 * Author: Stef Walter <stefw@gnome.org>
Packit Service 6d40f9
 */
Packit Service 6d40f9
Packit Service 6d40f9
#ifndef ADPRIVATE_H_
Packit Service 6d40f9
#define ADPRIVATE_H_
Packit Service 6d40f9
Packit Service 6d40f9
#include "adattrs.h"
Packit Service 6d40f9
#include "adconn.h"
Packit Service 6d40f9
Packit Service 6d40f9
#include <stdarg.h>
Packit Service 6d40f9
#include <limits.h>
Packit Service 6d40f9
#include <stdlib.h>
Packit Service 6d40f9
#include <stdio.h>
Packit Service f69335
#include <stdint.h>
Packit Service 6d40f9
Packit Service 6d40f9
#include <ldap.h>
Packit Service 6d40f9
Packit Service 6d40f9
#ifndef HOST_NAME_MAX
Packit Service 6d40f9
#define HOST_NAME_MAX 255
Packit Service 6d40f9
#endif
Packit Service 6d40f9
Packit Service 6d40f9
/* Utilities */
Packit Service 6d40f9
Packit Service 6d40f9
#if !defined(__cplusplus) && (__GNUC__ > 2)
Packit Service 6d40f9
#define GNUC_PRINTF(x, y) __attribute__((__format__(__printf__, x, y)))
Packit Service 6d40f9
#define GNUC_WARN_UNUSED __attribute__((warn_unused_result))
Packit Service 6d40f9
#else
Packit Service 6d40f9
#define GNUC_PRINTF(x, y)
Packit Service 6d40f9
#define GNUC_WARN_UNUSED
Packit Service 6d40f9
#endif
Packit Service 6d40f9
Packit Service 6d40f9
/* For detecting clang features */
Packit Service 6d40f9
#ifndef __has_feature
Packit Service 6d40f9
#define __has_feature(x) 0
Packit Service 6d40f9
#endif
Packit Service 6d40f9
Packit Service 6d40f9
#ifndef CLANG_ANALYZER_NORETURN
Packit Service 6d40f9
#if __has_feature(attribute_analyzer_noreturn)
Packit Service 6d40f9
#define CLANG_ANALYZER_NORETURN __attribute__((analyzer_noreturn))
Packit Service 6d40f9
#else
Packit Service 6d40f9
#define CLANG_ANALYZER_NORETURN
Packit Service 6d40f9
#endif
Packit Service 6d40f9
#endif
Packit Service 6d40f9
Packit Service 6d40f9
#define return_val_if_fail(x, v) \
Packit Service 6d40f9
	do { if (!(x)) { \
Packit Service 6d40f9
	     _adcli_precond_failed ("adcli: '%s' not true at %s\n", #x, __func__); \
Packit Service 6d40f9
	     return v; \
Packit Service 6d40f9
	} } while (0)
Packit Service 6d40f9
Packit Service 6d40f9
#define return_unexpected_if_fail(x) \
Packit Service 6d40f9
	return_val_if_fail ((x), ADCLI_ERR_UNEXPECTED)
Packit Service 6d40f9
Packit Service 6d40f9
#define return_if_fail(x) \
Packit Service 6d40f9
	do { if (!(x)) { \
Packit Service 6d40f9
	     _adcli_precond_failed ("adcli: '%s' not true at %s\n", #x, __func__); \
Packit Service 6d40f9
	     return; \
Packit Service 6d40f9
	} } while (0)
Packit Service 6d40f9
Packit Service 6d40f9
#define return_if_reached() \
Packit Service 6d40f9
	do { \
Packit Service 6d40f9
	     _adcli_precond_failed ("adcli: shouldn't be reached at %s\n", __func__); \
Packit Service 6d40f9
	     return; \
Packit Service 6d40f9
	} while (0)
Packit Service 6d40f9
Packit Service 6d40f9
#define return_val_if_reached(v) \
Packit Service 6d40f9
	do { \
Packit Service 6d40f9
	     _adcli_precond_failed ("adcli: shouldn't be reached at %s\n", __func__); \
Packit Service 6d40f9
	     return v; \
Packit Service 6d40f9
	} while (0)
Packit Service 6d40f9
Packit Service 6d40f9
#define return_unexpected_if_reached() \
Packit Service 6d40f9
	return_val_if_reached (ADCLI_ERR_UNEXPECTED)
Packit Service 6d40f9
Packit Service 6d40f9
void           _adcli_precond_failed         (const char *message,
Packit Service 6d40f9
                                              ...) GNUC_PRINTF (1, 2)
Packit Service 6d40f9
                                              CLANG_ANALYZER_NORETURN;
Packit Service 6d40f9
Packit Service 6d40f9
void           _adcli_err                    (const char *format,
Packit Service 6d40f9
                                             ...) GNUC_PRINTF(1, 2);
Packit Service 6d40f9
Packit Service 6d40f9
void           _adcli_warn                   (const char *format,
Packit Service 6d40f9
                                             ...) GNUC_PRINTF(1, 2);
Packit Service 6d40f9
Packit Service 6d40f9
void           _adcli_info                   (const char *format,
Packit Service 6d40f9
                                             ...) GNUC_PRINTF(1, 2);
Packit Service 6d40f9
Packit Service 6d40f9
int            _adcli_strv_len               (char **strv);
Packit Service 6d40f9
Packit Service 6d40f9
char **        _adcli_strv_add               (char **strv,
Packit Service 6d40f9
                                              char *string,
Packit Service 6d40f9
                                              int *length) GNUC_WARN_UNUSED;
Packit Service 8eb051
Packit Service 8eb051
char **        _adcli_strv_add_unique        (char **strv,
Packit Service 8eb051
                                              char *string,
Packit Service 8eb051
                                              int *length,
Packit Service 8eb051
                                              bool case_sensitive) GNUC_WARN_UNUSED;
Packit Service 56cb8d
Packit Service c76c4a
void           _adcli_strv_remove_unsorted   (char **strv,
Packit Service c76c4a
                                              const char *string,
Packit Service c76c4a
                                              int *length);
Packit Service c76c4a
Packit Service 6d40f9
void           _adcli_strv_free              (char **strv);
Packit Service 6d40f9
Packit Service 6d40f9
int            _adcli_strv_has               (char **strv,
Packit Service 6d40f9
                                              const char *str);
Packit Service 6d40f9
Packit Service 32b0f2
int            _adcli_strv_has_ex            (char **strv,
Packit Service 32b0f2
                                              const char *str,
Packit Service 32b0f2
                                              int (* compare) (const char *match, const char*value));
Packit Service 32b0f2
Packit Service 6d40f9
char **        _adcli_strv_dup               (char **strv) GNUC_WARN_UNUSED;
Packit Service 6d40f9
Packit Service 6d40f9
char *         _adcli_strv_join              (char **strv,
Packit Service 6d40f9
                                              const char *delim);
Packit Service 6d40f9
Packit Service 6d40f9
void           _adcli_str_up                 (char *str);
Packit Service 6d40f9
Packit Service 6d40f9
void           _adcli_str_down               (char *str);
Packit Service 6d40f9
Packit Service 6d40f9
int            _adcli_str_is_up              (const char *str);
Packit Service 6d40f9
Packit Service 6d40f9
int            _adcli_str_has_prefix         (const char *str,
Packit Service 6d40f9
		                              const char *prefix);
Packit Service 6d40f9
Packit Service 6d40f9
int            _adcli_str_has_suffix         (const char *str,
Packit Service 6d40f9
		                              const char *suffix);
Packit Service 6d40f9
Packit Service f69335
char *          _adcli_bin_sid_to_str        (const uint8_t *data,
Packit Service f69335
                                              size_t len);
Packit Service f69335
Packit Service 6d40f9
char *         _adcli_str_dupn               (void *data,
Packit Service 6d40f9
                                              size_t len);
Packit Service 6d40f9
Packit Service 6d40f9
void           _adcli_str_set                (char **field,
Packit Service 6d40f9
                                              const char *value);
Packit Service 6d40f9
Packit Service 6d40f9
void           _adcli_strv_set               (char ***field,
Packit Service 6d40f9
                                              const char **value);
Packit Service 6d40f9
Packit Service 6d40f9
int            _adcli_password_free          (char *password);
Packit Service 6d40f9
Packit Service 6d40f9
int            _adcli_write_all              (int fd,
Packit Service 6d40f9
                                              const char *buf,
Packit Service 6d40f9
                                              int len);
Packit Service 6d40f9
Packit Service 6d40f9
/* Connection helpers */
Packit Service 6d40f9
Packit Service 6d40f9
char *        _adcli_calc_reset_password     (const char *computer_name);
Packit Service 6d40f9
Packit Service 6d40f9
char *        _adcli_calc_netbios_name       (const char *host_fqdn);
Packit Service 6d40f9
Packit Service 6d40f9
krb5_error_code  _adcli_kinit_computer_creds      (adcli_conn *conn,
Packit Service 6d40f9
                                                   const char *in_tkt_service,
Packit Service 6d40f9
                                                   krb5_ccache ccache,
Packit Service 6d40f9
                                                   krb5_creds *creds);
Packit Service 6d40f9
Packit Service 6d40f9
krb5_error_code  _adcli_kinit_user_creds          (adcli_conn *conn,
Packit Service 6d40f9
                                                   const char *in_tkt_service,
Packit Service 6d40f9
                                                   krb5_ccache ccache,
Packit Service 6d40f9
                                                   krb5_creds *creds);
Packit Service 6d40f9
Packit Service 6d40f9
/* LDAP helpers */
Packit Service 6d40f9
Packit Service 6d40f9
adcli_result  _adcli_ldap_handle_failure     (LDAP *ldap,
Packit Service 6d40f9
                                              adcli_result defres,
Packit Service 6d40f9
                                              const char *desc,
Packit Service 6d40f9
                                              ...) GNUC_PRINTF(3, 4);
Packit Service 6d40f9
Packit Service 4765ac
char *         _adcli_ldap_parse_sid         (LDAP *ldap,
Packit Service 4765ac
                                              LDAPMessage *results,
Packit Service 4765ac
                                              const char *attr_name);
Packit Service 4765ac
Packit Service 6d40f9
char *        _adcli_ldap_parse_value        (LDAP *ldap,
Packit Service 6d40f9
                                              LDAPMessage *results,
Packit Service 6d40f9
                                              const char *attr_name);
Packit Service 6d40f9
Packit Service 6d40f9
char **       _adcli_ldap_parse_values       (LDAP *ldap,
Packit Service 6d40f9
                                              LDAPMessage *results,
Packit Service 6d40f9
                                              const char *attr_name);
Packit Service 6d40f9
Packit Service 6d40f9
char *        _adcli_ldap_parse_dn           (LDAP *ldap,
Packit Service 6d40f9
                                              LDAPMessage *results);
Packit Service 6d40f9
Packit Service 6d40f9
int           _adcli_ldap_ber_case_equal     (struct berval *one,
Packit Service 6d40f9
                                              struct berval *two);
Packit Service 6d40f9
Packit Service 6d40f9
int           _adcli_ldap_have_vals          (struct berval **want,
Packit Service 6d40f9
                                              struct berval **have);
Packit Service 6d40f9
Packit Service 6d40f9
int           _adcli_ldap_have_in_mod        (LDAPMod *want,
Packit Service 6d40f9
                                              struct berval **have);
Packit Service 6d40f9
Packit Service 6d40f9
char *        _adcli_ldap_escape_filter      (const char *value);
Packit Service 6d40f9
Packit Service 6d40f9
int           _adcli_ldap_dn_has_ancestor    (const char *dn,
Packit Service 6d40f9
                                              const char *ancestor);
Packit Service 6d40f9
Packit Service 6d40f9
int           _adcli_ldap_mod_compar         (void *match,
Packit Service 6d40f9
                                              void *mod);
Packit Service 6d40f9
Packit Service 6d40f9
int           _adcli_ldap_filter_for_add     (void *unused,
Packit Service 6d40f9
                                              void *mod);
Packit Service 6d40f9
Packit Service 6d40f9
LDAPMod *     _adcli_ldap_mod_new            (int mod_op,
Packit Service 6d40f9
                                              const char *type,
Packit Service 6d40f9
                                              const char **values);
Packit Service 6d40f9
Packit Service 6d40f9
LDAPMod *     _adcli_ldap_mod_new1           (int mod_op,
Packit Service 6d40f9
                                              const char *type,
Packit Service 6d40f9
                                              const char *value);
Packit Service 6d40f9
Packit Service 6d40f9
void          _adcli_ldap_mod_free           (void *mod);
Packit Service 6d40f9
Packit Service 6d40f9
char *        _adcli_ldap_mods_to_string     (LDAPMod **mods);
Packit Service 6d40f9
Packit Service 6d40f9
/* KRB5 helpers */
Packit Service 6d40f9
Packit Service 6d40f9
adcli_result     _adcli_krb5_init_context         (krb5_context *k5);
Packit Service 6d40f9
Packit Service 6d40f9
adcli_result     _adcli_krb5_open_keytab          (krb5_context k5,
Packit Service 6d40f9
                                                   const char *keytab_name,
Packit Service 6d40f9
                                                   krb5_keytab *keytab);
Packit Service 6d40f9
Packit Service 6d40f9
krb5_error_code  _adcli_krb5_build_principal      (krb5_context k5,
Packit Service 6d40f9
                                                   const char *user,
Packit Service 6d40f9
                                                   const char *realm,
Packit Service 6d40f9
                                                   krb5_principal *principal);
Packit Service 6d40f9
Packit Service 6d40f9
krb5_error_code  _adcli_krb5_keytab_clear         (krb5_context k5,
Packit Service 6d40f9
                                                   krb5_keytab keytab,
Packit Service 6d40f9
                                                   krb5_boolean (* match_func) (krb5_context,
Packit Service 6d40f9
                                                                krb5_keytab_entry *, void *),
Packit Service 6d40f9
                                                   void *match_data);
Packit Service 6d40f9
Packit Service 6d40f9
krb5_error_code  _adcli_krb5_keytab_clear_all     (krb5_context k5,
Packit Service 6d40f9
                                                   krb5_keytab keytab);
Packit Service 6d40f9
Packit Service 6d40f9
krb5_error_code  _adcli_krb5_keytab_enumerate     (krb5_context k5,
Packit Service 6d40f9
                                                   krb5_keytab keytab,
Packit Service 6d40f9
                                                   krb5_boolean (* match_func) (krb5_context,
Packit Service 6d40f9
                                                                krb5_keytab_entry *, void *),
Packit Service 6d40f9
                                                   void *match_data);
Packit Service 6d40f9
Packit Service 6d40f9
krb5_error_code  _adcli_krb5_keytab_add_entries   (krb5_context k5,
Packit Service 6d40f9
                                                   krb5_keytab keytab,
Packit Service 6d40f9
                                                   krb5_principal princpal,
Packit Service 6d40f9
                                                   krb5_kvno kvno,
Packit Service 6d40f9
                                                   krb5_data *password,
Packit Service 6d40f9
                                                   krb5_enctype *enctypes,
Packit Service 6d40f9
                                                   krb5_data *salt);
Packit Service 6d40f9
Packit Service 6d40f9
krb5_error_code  _adcli_krb5_keytab_test_salt     (krb5_context k5,
Packit Service 6d40f9
                                                   krb5_keytab scratch,
Packit Service 6d40f9
                                                   krb5_principal principal,
Packit Service 6d40f9
                                                   krb5_kvno kvno,
Packit Service 6d40f9
                                                   krb5_data *password,
Packit Service 6d40f9
                                                   krb5_enctype *enctypes,
Packit Service 6d40f9
                                                   krb5_data *salt);
Packit Service 6d40f9
Packit Service 6d40f9
krb5_error_code  _adcli_krb5_keytab_discover_salt (krb5_context k5,
Packit Service 6d40f9
                                                   krb5_principal principal,
Packit Service 6d40f9
                                                   krb5_kvno kvno,
Packit Service 6d40f9
                                                   krb5_data *password,
Packit Service 6d40f9
                                                   krb5_enctype *enctypes,
Packit Service 6d40f9
                                                   krb5_data *salts,
Packit Service 6d40f9
                                                   int *discovered);
Packit Service 6d40f9
Packit Service 6d40f9
krb5_error_code  _adcli_krb5_w2k3_salt            (krb5_context k5,
Packit Service 6d40f9
                                                   krb5_principal principal,
Packit Service 6d40f9
                                                   const char *host_netbios,
Packit Service 6d40f9
                                                   krb5_data *salt);
Packit Service 6d40f9
Packit Service 6d40f9
krb5_enctype *   _adcli_krb5_parse_enctypes       (const char *value);
Packit Service 6d40f9
Packit Service 6d40f9
char *           _adcli_krb5_format_enctypes      (krb5_enctype *enctypes);
Packit Service 6d40f9
Packit Service 005b26
krb5_error_code  _adcli_krb5_keytab_copy_entries  (krb5_context k5,
Packit Service 005b26
                                                   krb5_keytab keytab,
Packit Service 005b26
                                                   krb5_principal principal,
Packit Service 005b26
                                                   krb5_kvno kvno,
Packit Service 005b26
                                                   krb5_enctype *enctypes);
Packit Service 005b26
Packit Service 6d40f9
struct _adcli_attrs {
Packit Service 6d40f9
	LDAPMod **mods;
Packit Service 6d40f9
	int len;
Packit Service 6d40f9
};
Packit Service 6d40f9
Packit Service 6d40f9
bool             _adcli_check_nt_time_string_lifetime (const char *nt_time_string, unsigned int lifetime);
Packit Service 6d40f9
Packit Service f6f735
adcli_result     _adcli_call_external_program     (const char *binary,
Packit Service f6f735
                                                   char * const *argv,
Packit Service f6f735
                                                   const char *stdin_data,
Packit Service f6f735
                                                   uint8_t **stdout_data,
Packit Service f6f735
                                                   size_t *stdout_data_len);
Packit Service f6f735
Packit Service 6d40f9
#endif /* ADPRIVATE_H_ */