データ構造 | |
struct | dns_domain_label |
struct | dns_domain_name |
struct | dns_question |
struct | dns_zone |
struct | dns_rrec |
struct | dns_tkey_record |
struct | dns_request |
struct | dns_update_request |
struct | dns_connection |
struct | dns_buffer |
型定義 | |
typedef long | HANDLE |
typedef int | BOOL |
列挙型 | |
enum | dns_ServerType { DNS_SRV_ANY, DNS_SRV_WIN2000, DNS_SRV_WIN2003 } |
関数 | |
void * | _talloc_zero_zeronull (const void *ctx, size_t size, const char *name) |
void * | _talloc_memdup_zeronull (const void *t, const void *p, size_t size, const char *name) |
void * | _talloc_array_zeronull (const void *ctx, size_t el_size, unsigned count, const char *name) |
void * | _talloc_zero_array_zeronull (const void *ctx, size_t el_size, unsigned count, const char *name) |
void * | talloc_zeronull (const void *context, size_t size, const char *name) |
DNS_ERROR | dns_domain_name_from_string (TALLOC_CTX *mem_ctx, const char *pszDomainName, struct dns_domain_name **presult) |
char * | dns_generate_keyname (TALLOC_CTX *mem_ctx) |
DNS_ERROR | dns_create_query (TALLOC_CTX *mem_ctx, const char *name, uint16 q_type, uint16 q_class, struct dns_request **preq) |
DNS_ERROR | dns_create_update (TALLOC_CTX *mem_ctx, const char *name, struct dns_update_request **preq) |
DNS_ERROR | dns_create_probe (TALLOC_CTX *mem_ctx, const char *zone, const char *host, int num_ips, const struct in_addr *iplist, struct dns_update_request **preq) |
DNS_ERROR | dns_create_rrec (TALLOC_CTX *mem_ctx, const char *name, uint16 type, uint16 r_class, uint32 ttl, uint16 data_length, uint8 *data, struct dns_rrec **prec) |
DNS_ERROR | dns_add_rrec (TALLOC_CTX *mem_ctx, struct dns_rrec *rec, uint16 *num_records, struct dns_rrec ***records) |
DNS_ERROR | dns_create_tkey_record (TALLOC_CTX *mem_ctx, const char *keyname, const char *algorithm_name, time_t inception, time_t expiration, uint16 mode, uint16 error, uint16 key_length, const uint8 *key, struct dns_rrec **prec) |
DNS_ERROR | dns_create_name_in_use_record (TALLOC_CTX *mem_ctx, const char *name, const struct in_addr *ip, struct dns_rrec **prec) |
DNS_ERROR | dns_create_delete_record (TALLOC_CTX *mem_ctx, const char *name, uint16 type, uint16 r_class, struct dns_rrec **prec) |
DNS_ERROR | dns_create_name_not_in_use_record (TALLOC_CTX *mem_ctx, const char *name, uint32 type, struct dns_rrec **prec) |
DNS_ERROR | dns_create_a_record (TALLOC_CTX *mem_ctx, const char *host, uint32 ttl, struct in_addr ip, struct dns_rrec **prec) |
DNS_ERROR | dns_unmarshall_tkey_record (TALLOC_CTX *mem_ctx, struct dns_rrec *rec, struct dns_tkey_record **ptkey) |
DNS_ERROR | dns_create_tsig_record (TALLOC_CTX *mem_ctx, const char *keyname, const char *algorithm_name, time_t time_signed, uint16 fudge, uint16 mac_length, const uint8 *mac, uint16 original_id, uint16 error, struct dns_rrec **prec) |
DNS_ERROR | dns_open_connection (const char *nameserver, int32 dwType, TALLOC_CTX *mem_ctx, struct dns_connection **conn) |
DNS_ERROR | dns_send (struct dns_connection *conn, const struct dns_buffer *buf) |
DNS_ERROR | dns_receive (TALLOC_CTX *mem_ctx, struct dns_connection *conn, struct dns_buffer **presult) |
DNS_ERROR | dns_transaction (TALLOC_CTX *mem_ctx, struct dns_connection *conn, const struct dns_request *req, struct dns_request **resp) |
DNS_ERROR | dns_update_transaction (TALLOC_CTX *mem_ctx, struct dns_connection *conn, struct dns_update_request *up_req, struct dns_update_request **up_resp) |
dns_buffer * | dns_create_buffer (TALLOC_CTX *mem_ctx) |
void | dns_marshall_buffer (struct dns_buffer *buf, const uint8 *data, size_t len) |
void | dns_marshall_uint16 (struct dns_buffer *buf, uint16 val) |
void | dns_marshall_uint32 (struct dns_buffer *buf, uint32 val) |
void | dns_unmarshall_buffer (struct dns_buffer *buf, uint8 *data, size_t len) |
void | dns_unmarshall_uint16 (struct dns_buffer *buf, uint16 *val) |
void | dns_unmarshall_uint32 (struct dns_buffer *buf, uint32 *val) |
void | dns_unmarshall_domain_name (TALLOC_CTX *mem_ctx, struct dns_buffer *buf, struct dns_domain_name **pname) |
void | dns_marshall_domain_name (struct dns_buffer *buf, const struct dns_domain_name *name) |
DNS_ERROR | dns_marshall_request (TALLOC_CTX *mem_ctx, const struct dns_request *req, struct dns_buffer **pbuf) |
DNS_ERROR | dns_unmarshall_request (TALLOC_CTX *mem_ctx, struct dns_buffer *buf, struct dns_request **preq) |
DNS_ERROR | dns_marshall_update_request (TALLOC_CTX *mem_ctx, struct dns_update_request *update, struct dns_buffer **pbuf) |
DNS_ERROR | dns_unmarshall_update_request (TALLOC_CTX *mem_ctx, struct dns_buffer *buf, struct dns_update_request **pupreq) |
dns_request * | dns_update2request (struct dns_update_request *update) |
dns_update_request * | dns_request2update (struct dns_request *request) |
uint16 | dns_response_code (uint16 flags) |
void | display_status (const char *msg, OM_uint32 maj_stat, OM_uint32 min_stat) |
DNS_ERROR | dns_negotiate_sec_ctx (const char *target_realm, const char *servername, const char *keyname, gss_ctx_id_t *gss_ctx, enum dns_ServerType srv_type) |
DNS_ERROR | dns_sign_update (struct dns_update_request *req, gss_ctx_id_t gss_ctx, const char *keyname, const char *algorithmname, time_t time_signed, uint16 fudge) |
DNS_ERROR | dns_create_update_request (TALLOC_CTX *mem_ctx, const char *domainname, const char *hostname, const struct in_addr *ip_addr, size_t num_adds, struct dns_update_request **preq) |
enum dns_ServerType |
void* _talloc_zero_zeronull | ( | const void * | ctx, | |
size_t | size, | |||
const char * | name | |||
) |
参照先 talloc_named_const().
03251 { 03252 void *p; 03253 03254 if (size == 0) { 03255 return NULL; 03256 } 03257 03258 p = talloc_named_const(ctx, size, name); 03259 03260 if (p) { 03261 memset(p, '\0', size); 03262 } 03263 03264 return p; 03265 }
void* _talloc_memdup_zeronull | ( | const void * | t, | |
const void * | p, | |||
size_t | size, | |||
const char * | name | |||
) |
参照先 talloc_named_const().
03273 { 03274 void *newp; 03275 03276 if (size == 0) { 03277 return NULL; 03278 } 03279 03280 newp = talloc_named_const(t, size, name); 03281 if (newp) { 03282 memcpy(newp, p, size); 03283 } 03284 03285 return newp; 03286 }
void* _talloc_array_zeronull | ( | const void * | ctx, | |
size_t | el_size, | |||
unsigned | count, | |||
const char * | name | |||
) |
参照先 talloc_named_const().
03294 { 03295 if (count >= MAX_TALLOC_SIZE/el_size) { 03296 return NULL; 03297 } 03298 03299 if (el_size == 0 || count == 0) { 03300 return NULL; 03301 } 03302 03303 return talloc_named_const(ctx, el_size * count, name); 03304 }
void* _talloc_zero_array_zeronull | ( | const void * | ctx, | |
size_t | el_size, | |||
unsigned | count, | |||
const char * | name | |||
) |
参照先 _talloc_zero().
03312 { 03313 if (count >= MAX_TALLOC_SIZE/el_size) { 03314 return NULL; 03315 } 03316 03317 if (el_size == 0 || count == 0) { 03318 return NULL; 03319 } 03320 03321 return _talloc_zero(ctx, el_size * count, name); 03322 }
void* talloc_zeronull | ( | const void * | context, | |
size_t | size, | |||
const char * | name | |||
) |
参照先 talloc_named_const().
03328 { 03329 if (size == 0) { 03330 return NULL; 03331 } 03332 return talloc_named_const(context, size, name); 03333 }
DNS_ERROR dns_domain_name_from_string | ( | TALLOC_CTX * | mem_ctx, | |
const char * | pszDomainName, | |||
struct dns_domain_name ** | presult | |||
) |
dnsutils.c の 109 行で定義されています。
参照先 err・LabelList()・result.
参照元 dns_create_query()・dns_create_rrec()・dns_create_tkey_record()・dns_create_tsig_record()・dns_create_update()・dns_sign_update().
00112 { 00113 struct dns_domain_name *result; 00114 DNS_ERROR err; 00115 00116 if (!(result = talloc(mem_ctx, struct dns_domain_name))) { 00117 return ERROR_DNS_NO_MEMORY; 00118 } 00119 00120 err = LabelList( result, pszDomainName, &result->pLabelList ); 00121 if (!ERR_DNS_IS_OK(err)) { 00122 TALLOC_FREE(result); 00123 return err; 00124 } 00125 00126 *presult = result; 00127 return ERROR_DNS_SUCCESS; 00128 }
char* dns_generate_keyname | ( | TALLOC_CTX * | mem_ctx | ) |
dnsutils.c の 133 行で定義されています。
参照先 result.
参照元 DoDNSUpdate().
00134 { 00135 char *result = NULL; 00136 #if defined(WITH_DNS_UPDATES) 00137 00138 uuid_t uuid; 00139 00140 /* 00141 * uuid_unparse gives 36 bytes plus '\0' 00142 */ 00143 if (!(result = TALLOC_ARRAY(mem_ctx, char, 37))) { 00144 return NULL; 00145 } 00146 00147 uuid_generate( uuid ); 00148 uuid_unparse( uuid, result ); 00149 00150 #endif 00151 00152 return result; 00153 }
DNS_ERROR dns_create_query | ( | TALLOC_CTX * | mem_ctx, | |
const char * | name, | |||
uint16 | q_type, | |||
uint16 | q_class, | |||
struct dns_request ** | preq | |||
) |
dnsrecord.c の 28 行で定義されています。
参照先 dns_domain_name_from_string()・err・dns_request::id・dns_question::name・dns_request::num_questions・dns_question::q_class・dns_question::q_type・dns_request::questions.
参照元 dns_negotiate_gss_ctx_int()・do_gethostbyname().
00031 { 00032 struct dns_request *req; 00033 struct dns_question *q; 00034 DNS_ERROR err; 00035 00036 if (!(req = TALLOC_ZERO_P(mem_ctx, struct dns_request)) || 00037 !(req->questions = TALLOC_ARRAY(req, struct dns_question *, 1)) || 00038 !(req->questions[0] = talloc(req->questions, 00039 struct dns_question))) { 00040 TALLOC_FREE(req); 00041 return ERROR_DNS_NO_MEMORY; 00042 } 00043 00044 req->id = random(); 00045 00046 req->num_questions = 1; 00047 q = req->questions[0]; 00048 00049 err = dns_domain_name_from_string(q, name, &q->name); 00050 if (!ERR_DNS_IS_OK(err)) { 00051 TALLOC_FREE(req); 00052 return err; 00053 } 00054 00055 q->q_type = q_type; 00056 q->q_class = q_class; 00057 00058 *preq = req; 00059 return ERROR_DNS_SUCCESS; 00060 }
DNS_ERROR dns_create_update | ( | TALLOC_CTX * | mem_ctx, | |
const char * | name, | |||
struct dns_update_request ** | preq | |||
) |
dnsrecord.c の 62 行で定義されています。
参照先 dns_domain_name_from_string()・err・dns_update_request::flags・dns_update_request::id・dns_zone::name・dns_update_request::num_zones・dns_zone::z_class・dns_zone::z_type・dns_update_request::zones.
参照元 dns_create_probe()・dns_create_update_request().
00064 { 00065 struct dns_update_request *req; 00066 struct dns_zone *z; 00067 DNS_ERROR err; 00068 00069 if (!(req = TALLOC_ZERO_P(mem_ctx, struct dns_update_request)) || 00070 !(req->zones = TALLOC_ARRAY(req, struct dns_zone *, 1)) || 00071 !(req->zones[0] = talloc(req->zones, struct dns_zone))) { 00072 TALLOC_FREE(req); 00073 return ERROR_DNS_NO_MEMORY; 00074 } 00075 00076 req->id = random(); 00077 req->flags = 0x2800; /* Dynamic update */ 00078 00079 req->num_zones = 1; 00080 z = req->zones[0]; 00081 00082 err = dns_domain_name_from_string(z, name, &z->name); 00083 if (!ERR_DNS_IS_OK(err)) { 00084 TALLOC_FREE(req); 00085 return err; 00086 } 00087 00088 z->z_type = QTYPE_SOA; 00089 z->z_class = DNS_CLASS_IN; 00090 00091 *preq = req; 00092 return ERROR_DNS_SUCCESS; 00093 }
DNS_ERROR dns_create_probe | ( | TALLOC_CTX * | mem_ctx, | |
const char * | zone, | |||
const char * | host, | |||
int | num_ips, | |||
const struct in_addr * | iplist, | |||
struct dns_update_request ** | preq | |||
) |
dnsrecord.c の 324 行で定義されています。
参照先 dns_add_rrec()・dns_create_name_in_use_record()・dns_create_name_not_in_use_record()・dns_create_update()・err・error・dns_update_request::num_preqs・dns_update_request::preqs.
参照元 DoDNSUpdate().
00328 { 00329 struct dns_update_request *req; 00330 struct dns_rrec *rec; 00331 DNS_ERROR err; 00332 uint16 i; 00333 00334 err = dns_create_update(mem_ctx, zone, &req); 00335 if (!ERR_DNS_IS_OK(err)) goto error; 00336 00337 err = dns_create_name_not_in_use_record(req, host, QTYPE_CNAME, &rec); 00338 if (!ERR_DNS_IS_OK(err)) goto error; 00339 00340 err = dns_add_rrec(req, rec, &req->num_preqs, &req->preqs); 00341 if (!ERR_DNS_IS_OK(err)) goto error; 00342 00343 for (i=0; i<num_ips; i++) { 00344 err = dns_create_name_in_use_record(req, host, 00345 &iplist[i], &rec); 00346 if (!ERR_DNS_IS_OK(err)) goto error; 00347 00348 err = dns_add_rrec(req, rec, &req->num_preqs, &req->preqs); 00349 if (!ERR_DNS_IS_OK(err)) goto error; 00350 } 00351 00352 *preq = req; 00353 return ERROR_DNS_SUCCESS; 00354 00355 error: 00356 TALLOC_FREE(req); 00357 return err; 00358 }
DNS_ERROR dns_create_rrec | ( | TALLOC_CTX * | mem_ctx, | |
const char * | name, | |||
uint16 | type, | |||
uint16 | r_class, | |||
uint32 | ttl, | |||
uint16 | data_length, | |||
uint8 * | data, | |||
struct dns_rrec ** | prec | |||
) |
dnsrecord.c の 95 行で定義されています。
参照先 dns_rrec::data・dns_rrec::data_length・dns_domain_name_from_string()・err・dns_rrec::name・dns_rrec::r_class・dns_rrec::ttl・dns_rrec::type.
参照元 dns_create_a_record()・dns_create_delete_record()・dns_create_name_in_use_record()・dns_create_name_not_in_use_record()・dns_create_tkey_record()・dns_create_tsig_record()・dns_create_update_request().
00099 { 00100 struct dns_rrec *rec; 00101 DNS_ERROR err; 00102 00103 if (!(rec = talloc(mem_ctx, struct dns_rrec))) { 00104 return ERROR_DNS_NO_MEMORY; 00105 } 00106 00107 err = dns_domain_name_from_string(rec, name, &rec->name); 00108 if (!(ERR_DNS_IS_OK(err))) { 00109 TALLOC_FREE(rec); 00110 return err; 00111 } 00112 00113 rec->type = type; 00114 rec->r_class = r_class; 00115 rec->ttl = ttl; 00116 rec->data_length = data_length; 00117 rec->data = talloc_move(rec, &data); 00118 00119 *prec = rec; 00120 return ERROR_DNS_SUCCESS; 00121 }
DNS_ERROR dns_add_rrec | ( | TALLOC_CTX * | mem_ctx, | |
struct dns_rrec * | rec, | |||
uint16 * | num_records, | |||
struct dns_rrec *** | records | |||
) |
dnsrecord.c の 301 行で定義されています。
参照元 dns_create_probe()・dns_create_update_request()・dns_negotiate_gss_ctx_int()・dns_sign_update().
00303 { 00304 struct dns_rrec **new_records; 00305 00306 if (!(new_records = TALLOC_REALLOC_ARRAY(mem_ctx, *records, 00307 struct dns_rrec *, 00308 (*num_records)+1))) { 00309 return ERROR_DNS_NO_MEMORY; 00310 } 00311 00312 new_records[*num_records] = talloc_move(new_records, &rec); 00313 00314 *num_records += 1; 00315 *records = new_records; 00316 return ERROR_DNS_SUCCESS; 00317 }
DNS_ERROR dns_create_tkey_record | ( | TALLOC_CTX * | mem_ctx, | |
const char * | keyname, | |||
const char * | algorithm_name, | |||
time_t | inception, | |||
time_t | expiration, | |||
uint16 | mode, | |||
uint16 | error, | |||
uint16 | key_length, | |||
const uint8 * | key, | |||
struct dns_rrec ** | prec | |||
) |
dnsrecord.c の 173 行で定義されています。
参照先 buf・dns_create_buffer()・dns_create_rrec()・dns_domain_name_from_string()・dns_marshall_buffer()・dns_marshall_domain_name()・dns_marshall_uint16()・dns_marshall_uint32()・err.
参照元 dns_negotiate_gss_ctx_int().
00178 { 00179 struct dns_buffer *buf; 00180 struct dns_domain_name *algorithm; 00181 DNS_ERROR err; 00182 00183 if (!(buf = dns_create_buffer(mem_ctx))) { 00184 return ERROR_DNS_NO_MEMORY; 00185 } 00186 00187 err = dns_domain_name_from_string(buf, algorithm_name, &algorithm); 00188 if (!ERR_DNS_IS_OK(err)) goto error; 00189 00190 dns_marshall_domain_name(buf, algorithm); 00191 dns_marshall_uint32(buf, inception); 00192 dns_marshall_uint32(buf, expiration); 00193 dns_marshall_uint16(buf, mode); 00194 dns_marshall_uint16(buf, error); 00195 dns_marshall_uint16(buf, key_length); 00196 dns_marshall_buffer(buf, key, key_length); 00197 dns_marshall_uint16(buf, 0); /* Other Size */ 00198 00199 if (!ERR_DNS_IS_OK(buf->error)) { 00200 err = buf->error; 00201 goto error; 00202 } 00203 00204 err = dns_create_rrec(mem_ctx, keyname, QTYPE_TKEY, DNS_CLASS_ANY, 0, 00205 buf->offset, buf->data, prec); 00206 00207 error: 00208 TALLOC_FREE(buf); 00209 return err; 00210 }
DNS_ERROR dns_create_name_in_use_record | ( | TALLOC_CTX * | mem_ctx, | |
const char * | name, | |||
const struct in_addr * | ip, | |||
struct dns_rrec ** | prec | |||
) |
dnsrecord.c の 145 行で定義されています。
参照先 dns_create_a_record()・dns_create_rrec().
参照元 dns_create_probe().
00149 { 00150 if (ip != NULL) { 00151 return dns_create_a_record(mem_ctx, name, 0, *ip, prec); 00152 } 00153 00154 return dns_create_rrec(mem_ctx, name, QTYPE_ANY, DNS_CLASS_IN, 0, 0, 00155 NULL, prec); 00156 }
DNS_ERROR dns_create_delete_record | ( | TALLOC_CTX * | mem_ctx, | |
const char * | name, | |||
uint16 | type, | |||
uint16 | r_class, | |||
struct dns_rrec ** | prec | |||
) |
dnsrecord.c の 166 行で定義されています。
参照先 dns_create_rrec().
参照元 dns_create_update_request().
00169 { 00170 return dns_create_rrec(mem_ctx, name, type, r_class, 0, 0, NULL, prec); 00171 }
DNS_ERROR dns_create_name_not_in_use_record | ( | TALLOC_CTX * | mem_ctx, | |
const char * | name, | |||
uint32 | type, | |||
struct dns_rrec ** | prec | |||
) |
dnsrecord.c の 158 行で定義されています。
参照先 dns_create_rrec().
参照元 dns_create_probe().
00161 { 00162 return dns_create_rrec(mem_ctx, name, type, DNS_CLASS_NONE, 0, 00163 0, NULL, prec); 00164 }
DNS_ERROR dns_create_a_record | ( | TALLOC_CTX * | mem_ctx, | |
const char * | host, | |||
uint32 | ttl, | |||
struct in_addr | ip, | |||
struct dns_rrec ** | prec | |||
) |
dnsrecord.c の 123 行で定義されています。
参照先 dns_rrec::data・dns_create_rrec()・err.
参照元 dns_create_name_in_use_record()・dns_create_update_request().
00126 { 00127 uint8 *data; 00128 DNS_ERROR err; 00129 00130 if (!(data = (uint8 *)TALLOC_MEMDUP(mem_ctx, (const void *)&ip.s_addr, 00131 sizeof(ip.s_addr)))) { 00132 return ERROR_DNS_NO_MEMORY; 00133 } 00134 00135 err = dns_create_rrec(mem_ctx, host, QTYPE_A, DNS_CLASS_IN, ttl, 00136 sizeof(ip.s_addr), data, prec); 00137 00138 if (!ERR_DNS_IS_OK(err)) { 00139 TALLOC_FREE(data); 00140 } 00141 00142 return err; 00143 }
DNS_ERROR dns_unmarshall_tkey_record | ( | TALLOC_CTX * | mem_ctx, | |
struct dns_rrec * | rec, | |||
struct dns_tkey_record ** | ptkey | |||
) |
dnsrecord.c の 212 行で定義されています。
参照先 dns_tkey_record::algorithm・buf・dns_rrec::data・dns_rrec::data_length・dns_unmarshall_buffer()・dns_unmarshall_domain_name()・dns_unmarshall_uint16()・dns_unmarshall_uint32()・dns_tkey_record::error・error・dns_tkey_record::expiration・dns_tkey_record::inception・dns_tkey_record::key・dns_tkey_record::key_length・dns_tkey_record::mode.
参照元 dns_negotiate_gss_ctx_int().
00214 { 00215 struct dns_tkey_record *tkey; 00216 struct dns_buffer buf; 00217 uint32 tmp_inception, tmp_expiration; 00218 00219 if (!(tkey = talloc(mem_ctx, struct dns_tkey_record))) { 00220 return ERROR_DNS_NO_MEMORY; 00221 } 00222 00223 buf.data = rec->data; 00224 buf.size = rec->data_length; 00225 buf.offset = 0; 00226 buf.error = ERROR_DNS_SUCCESS; 00227 00228 dns_unmarshall_domain_name(tkey, &buf, &tkey->algorithm); 00229 dns_unmarshall_uint32(&buf, &tmp_inception); 00230 dns_unmarshall_uint32(&buf, &tmp_expiration); 00231 dns_unmarshall_uint16(&buf, &tkey->mode); 00232 dns_unmarshall_uint16(&buf, &tkey->error); 00233 dns_unmarshall_uint16(&buf, &tkey->key_length); 00234 00235 if (!ERR_DNS_IS_OK(buf.error)) goto error; 00236 00237 if (tkey->key_length) { 00238 if (!(tkey->key = TALLOC_ARRAY(tkey, uint8, tkey->key_length))) { 00239 buf.error = ERROR_DNS_NO_MEMORY; 00240 goto error; 00241 } 00242 } else { 00243 tkey->key = NULL; 00244 } 00245 00246 dns_unmarshall_buffer(&buf, tkey->key, tkey->key_length); 00247 if (!ERR_DNS_IS_OK(buf.error)) goto error; 00248 00249 tkey->inception = (time_t)tmp_inception; 00250 tkey->expiration = (time_t)tmp_expiration; 00251 00252 *ptkey = tkey; 00253 return ERROR_DNS_SUCCESS; 00254 00255 error: 00256 TALLOC_FREE(tkey); 00257 return buf.error; 00258 }
DNS_ERROR dns_create_tsig_record | ( | TALLOC_CTX * | mem_ctx, | |
const char * | keyname, | |||
const char * | algorithm_name, | |||
time_t | time_signed, | |||
uint16 | fudge, | |||
uint16 | mac_length, | |||
const uint8 * | mac, | |||
uint16 | original_id, | |||
uint16 | error, | |||
struct dns_rrec ** | prec | |||
) |
dnsrecord.c の 260 行で定義されています。
参照先 buf・dns_create_buffer()・dns_create_rrec()・dns_domain_name_from_string()・dns_marshall_buffer()・dns_marshall_domain_name()・dns_marshall_uint16()・dns_marshall_uint32()・err.
参照元 dns_sign_update().
00266 { 00267 struct dns_buffer *buf; 00268 struct dns_domain_name *algorithm; 00269 DNS_ERROR err; 00270 00271 if (!(buf = dns_create_buffer(mem_ctx))) { 00272 return ERROR_DNS_NO_MEMORY; 00273 } 00274 00275 err = dns_domain_name_from_string(buf, algorithm_name, &algorithm); 00276 if (!ERR_DNS_IS_OK(err)) goto error; 00277 00278 dns_marshall_domain_name(buf, algorithm); 00279 dns_marshall_uint16(buf, 0); /* time prefix */ 00280 dns_marshall_uint32(buf, time_signed); 00281 dns_marshall_uint16(buf, fudge); 00282 dns_marshall_uint16(buf, mac_length); 00283 dns_marshall_buffer(buf, mac, mac_length); 00284 dns_marshall_uint16(buf, original_id); 00285 dns_marshall_uint16(buf, error); 00286 dns_marshall_uint16(buf, 0); /* Other Size */ 00287 00288 if (!ERR_DNS_IS_OK(buf->error)) { 00289 err = buf->error; 00290 goto error; 00291 } 00292 00293 err = dns_create_rrec(mem_ctx, keyname, QTYPE_TSIG, DNS_CLASS_ANY, 0, 00294 buf->offset, buf->data, prec); 00295 00296 error: 00297 TALLOC_FREE(buf); 00298 return err; 00299 }
DNS_ERROR dns_open_connection | ( | const char * | nameserver, | |
int32 | dwType, | |||
TALLOC_CTX * | mem_ctx, | |||
struct dns_connection ** | conn | |||
) |
参照先 dns_tcp_open()・dns_udp_open().
参照元 dns_negotiate_sec_ctx()・do_gethostbyname()・DoDNSUpdate().
00140 { 00141 switch ( dwType ) { 00142 case DNS_TCP: 00143 return dns_tcp_open( nameserver, mem_ctx, conn ); 00144 case DNS_UDP: 00145 return dns_udp_open( nameserver, mem_ctx, conn ); 00146 } 00147 00148 return ERROR_DNS_INVALID_PARAMETER; 00149 }
DNS_ERROR dns_send | ( | struct dns_connection * | conn, | |
const struct dns_buffer * | buf | |||
) |
参照先 buf・dns_send_tcp()・dns_send_udp()・dns_connection::hType.
参照元 dns_negotiate_gss_ctx_int()・dns_transaction().
00201 { 00202 if (conn->hType == DNS_TCP) { 00203 return dns_send_tcp(conn, buf); 00204 } 00205 00206 if (conn->hType == DNS_UDP) { 00207 return dns_send_udp(conn, buf); 00208 } 00209 00210 return ERROR_DNS_INVALID_PARAMETER; 00211 }
DNS_ERROR dns_receive | ( | TALLOC_CTX * | mem_ctx, | |
struct dns_connection * | conn, | |||
struct dns_buffer ** | presult | |||
) |
参照先 dns_receive_tcp()・dns_receive_udp()・dns_connection::hType.
参照元 dns_negotiate_gss_ctx_int()・dns_transaction().
00327 { 00328 if (conn->hType == DNS_TCP) { 00329 return dns_receive_tcp(mem_ctx, conn, presult); 00330 } 00331 00332 if (conn->hType == DNS_UDP) { 00333 return dns_receive_udp(mem_ctx, conn, presult); 00334 } 00335 00336 return ERROR_DNS_INVALID_PARAMETER; 00337 }
DNS_ERROR dns_transaction | ( | TALLOC_CTX * | mem_ctx, | |
struct dns_connection * | conn, | |||
const struct dns_request * | req, | |||
struct dns_request ** | resp | |||
) |
参照先 buf・dns_marshall_request()・dns_receive()・dns_send()・dns_unmarshall_request()・err・error.
参照元 dns_update_transaction()・do_gethostbyname().
00342 { 00343 struct dns_buffer *buf = NULL; 00344 DNS_ERROR err; 00345 00346 err = dns_marshall_request(conn, req, &buf); 00347 if (!ERR_DNS_IS_OK(err)) goto error; 00348 00349 err = dns_send(conn, buf); 00350 if (!ERR_DNS_IS_OK(err)) goto error; 00351 TALLOC_FREE(buf); 00352 00353 err = dns_receive(mem_ctx, conn, &buf); 00354 if (!ERR_DNS_IS_OK(err)) goto error; 00355 00356 err = dns_unmarshall_request(mem_ctx, buf, resp); 00357 00358 error: 00359 TALLOC_FREE(buf); 00360 return err; 00361 }
DNS_ERROR dns_update_transaction | ( | TALLOC_CTX * | mem_ctx, | |
struct dns_connection * | conn, | |||
struct dns_update_request * | up_req, | |||
struct dns_update_request ** | up_resp | |||
) |
参照先 dns_request2update()・dns_transaction()・dns_update2request()・err.
参照元 DoDNSUpdate().
00367 { 00368 struct dns_request *resp; 00369 DNS_ERROR err; 00370 00371 err = dns_transaction(mem_ctx, conn, dns_update2request(up_req), 00372 &resp); 00373 00374 if (!ERR_DNS_IS_OK(err)) return err; 00375 00376 *up_resp = dns_request2update(resp); 00377 return ERROR_DNS_SUCCESS; 00378 }
struct dns_buffer* dns_create_buffer | ( | TALLOC_CTX * | mem_ctx | ) |
dnsmarshall.c の 28 行で定義されています。
参照先 result.
参照元 dns_create_tkey_record()・dns_create_tsig_record()・dns_marshall_request().
00029 { 00030 struct dns_buffer *result; 00031 00032 if (!(result = talloc(mem_ctx, struct dns_buffer))) { 00033 return NULL; 00034 } 00035 00036 result->offset = 0; 00037 result->error = ERROR_DNS_SUCCESS; 00038 00039 /* 00040 * Small inital size to excercise the realloc code 00041 */ 00042 result->size = 2; 00043 00044 if (!(result->data = TALLOC_ARRAY(result, uint8, result->size))) { 00045 TALLOC_FREE(result); 00046 return NULL; 00047 } 00048 00049 return result; 00050 }
void dns_marshall_buffer | ( | struct dns_buffer * | buf, | |
const uint8 * | data, | |||
size_t | len | |||
) |
dnsmarshall.c の 52 行で定義されています。
参照先 buf・dns_buffer::offset.
参照元 dns_create_tkey_record()・dns_create_tsig_record()・dns_marshall_domain_name()・dns_marshall_rr()・dns_marshall_uint16()・dns_marshall_uint32().
00054 { 00055 if (!ERR_DNS_IS_OK(buf->error)) return; 00056 00057 if (buf->offset + len < buf->offset) { 00058 /* 00059 * Wraparound! 00060 */ 00061 buf->error = ERROR_DNS_INVALID_PARAMETER; 00062 return; 00063 } 00064 00065 if ((buf->offset + len) > 0xffff) { 00066 /* 00067 * Only 64k possible 00068 */ 00069 buf->error = ERROR_DNS_INVALID_PARAMETER; 00070 return; 00071 } 00072 00073 if (buf->offset + len > buf->size) { 00074 size_t new_size = buf->offset + len; 00075 uint8 *new_data; 00076 00077 /* 00078 * Don't do too many reallocs, round up to some multiple 00079 */ 00080 00081 new_size += (64 - (new_size % 64)); 00082 00083 if (!(new_data = TALLOC_REALLOC_ARRAY(buf, buf->data, uint8, 00084 new_size))) { 00085 buf->error = ERROR_DNS_NO_MEMORY; 00086 return; 00087 } 00088 00089 buf->size = new_size; 00090 buf->data = new_data; 00091 } 00092 00093 memcpy(buf->data + buf->offset, data, len); 00094 buf->offset += len; 00095 return; 00096 }
void dns_marshall_uint16 | ( | struct dns_buffer * | buf, | |
uint16 | val | |||
) |
dnsmarshall.c の 98 行で定義されています。
参照先 buf・dns_marshall_buffer().
参照元 dns_create_tkey_record()・dns_create_tsig_record()・dns_marshall_question()・dns_marshall_request()・dns_marshall_rr()・dns_sign_update().
00099 { 00100 uint16 n_val = htons(val); 00101 dns_marshall_buffer(buf, (uint8 *)&n_val, sizeof(n_val)); 00102 }
void dns_marshall_uint32 | ( | struct dns_buffer * | buf, | |
uint32 | val | |||
) |
dnsmarshall.c の 104 行で定義されています。
参照先 buf・dns_marshall_buffer().
参照元 dns_create_tkey_record()・dns_create_tsig_record()・dns_marshall_rr()・dns_sign_update().
00105 { 00106 uint32 n_val = htonl(val); 00107 dns_marshall_buffer(buf, (uint8 *)&n_val, sizeof(n_val)); 00108 }
void dns_unmarshall_buffer | ( | struct dns_buffer * | buf, | |
uint8 * | data, | |||
size_t | len | |||
) |
dnsmarshall.c の 110 行で定義されています。
参照先 buf.
参照元 dns_unmarshall_label()・dns_unmarshall_rr()・dns_unmarshall_tkey_record()・dns_unmarshall_uint16()・dns_unmarshall_uint32().
00112 { 00113 if (!(ERR_DNS_IS_OK(buf->error))) return; 00114 00115 if ((len > buf->size) || (buf->offset + len > buf->size)) { 00116 buf->error = ERROR_DNS_INVALID_MESSAGE; 00117 return; 00118 } 00119 00120 memcpy((void *)data, (const void *)(buf->data + buf->offset), len); 00121 buf->offset += len; 00122 00123 return; 00124 }
void dns_unmarshall_uint16 | ( | struct dns_buffer * | buf, | |
uint16 * | val | |||
) |
dnsmarshall.c の 126 行で定義されています。
参照先 buf・dns_unmarshall_buffer().
参照元 dns_unmarshall_question()・dns_unmarshall_request()・dns_unmarshall_rr()・dns_unmarshall_tkey_record().
00127 { 00128 uint16 n_val; 00129 00130 dns_unmarshall_buffer(buf, (uint8 *)&n_val, sizeof(n_val)); 00131 if (!(ERR_DNS_IS_OK(buf->error))) return; 00132 00133 *val = ntohs(n_val); 00134 }
void dns_unmarshall_uint32 | ( | struct dns_buffer * | buf, | |
uint32 * | val | |||
) |
dnsmarshall.c の 136 行で定義されています。
参照先 buf・dns_unmarshall_buffer().
参照元 dns_unmarshall_rr()・dns_unmarshall_tkey_record().
00137 { 00138 uint32 n_val; 00139 00140 dns_unmarshall_buffer(buf, (uint8 *)&n_val, sizeof(n_val)); 00141 if (!(ERR_DNS_IS_OK(buf->error))) return; 00142 00143 *val = ntohl(n_val); 00144 }
void dns_unmarshall_domain_name | ( | TALLOC_CTX * | mem_ctx, | |
struct dns_buffer * | buf, | |||
struct dns_domain_name ** | pname | |||
) |
dnsmarshall.c の 247 行で定義されています。
参照先 buf・dns_unmarshall_label()・name.
参照元 dns_unmarshall_question()・dns_unmarshall_rr()・dns_unmarshall_tkey_record().
00250 { 00251 struct dns_domain_name *name; 00252 00253 if (!ERR_DNS_IS_OK(buf->error)) return; 00254 00255 if (!(name = talloc(mem_ctx, struct dns_domain_name))) { 00256 buf->error = ERROR_DNS_NO_MEMORY; 00257 } 00258 00259 dns_unmarshall_label(name, 0, buf, &name->pLabelList); 00260 00261 if (!ERR_DNS_IS_OK(buf->error)) { 00262 return; 00263 } 00264 00265 *pname = name; 00266 return; 00267 }
void dns_marshall_domain_name | ( | struct dns_buffer * | buf, | |
const struct dns_domain_name * | name | |||
) |
dnsmarshall.c の 146 行で定義されています。
参照先 buf・dns_marshall_buffer()・dns_domain_label::label・len・name.
参照元 dns_create_tkey_record()・dns_create_tsig_record()・dns_marshall_question()・dns_marshall_rr()・dns_sign_update().
00148 { 00149 struct dns_domain_label *label; 00150 char end_char = '\0'; 00151 00152 /* 00153 * TODO: Implement DNS compression 00154 */ 00155 00156 for (label = name->pLabelList; label != NULL; label = label->next) { 00157 uint8 len = label->len; 00158 00159 dns_marshall_buffer(buf, (uint8 *)&len, sizeof(len)); 00160 if (!ERR_DNS_IS_OK(buf->error)) return; 00161 00162 dns_marshall_buffer(buf, (uint8 *)label->label, len); 00163 if (!ERR_DNS_IS_OK(buf->error)) return; 00164 } 00165 00166 dns_marshall_buffer(buf, (uint8 *)&end_char, 1); 00167 }
DNS_ERROR dns_marshall_request | ( | TALLOC_CTX * | mem_ctx, | |
const struct dns_request * | req, | |||
struct dns_buffer ** | pbuf | |||
) |
dnsmarshall.c の 345 行で定義されています。
参照先 dns_request::additionals・dns_request::answers・dns_request::auths・buf・dns_create_buffer()・dns_marshall_question()・dns_marshall_rr()・dns_marshall_uint16()・err・dns_request::flags・dns_request::id・dns_request::num_additionals・dns_request::num_answers・dns_request::num_auths・dns_request::num_questions・dns_request::questions.
参照元 dns_marshall_update_request()・dns_negotiate_gss_ctx_int()・dns_transaction().
00348 { 00349 struct dns_buffer *buf; 00350 uint16 i; 00351 00352 if (!(buf = dns_create_buffer(mem_ctx))) { 00353 return ERROR_DNS_NO_MEMORY; 00354 } 00355 00356 dns_marshall_uint16(buf, req->id); 00357 dns_marshall_uint16(buf, req->flags); 00358 dns_marshall_uint16(buf, req->num_questions); 00359 dns_marshall_uint16(buf, req->num_answers); 00360 dns_marshall_uint16(buf, req->num_auths); 00361 dns_marshall_uint16(buf, req->num_additionals); 00362 00363 for (i=0; i<req->num_questions; i++) { 00364 dns_marshall_question(buf, req->questions[i]); 00365 } 00366 for (i=0; i<req->num_answers; i++) { 00367 dns_marshall_rr(buf, req->answers[i]); 00368 } 00369 for (i=0; i<req->num_auths; i++) { 00370 dns_marshall_rr(buf, req->auths[i]); 00371 } 00372 for (i=0; i<req->num_additionals; i++) { 00373 dns_marshall_rr(buf, req->additionals[i]); 00374 } 00375 00376 if (!ERR_DNS_IS_OK(buf->error)) { 00377 DNS_ERROR err = buf->error; 00378 TALLOC_FREE(buf); 00379 return err; 00380 } 00381 00382 *pbuf = buf; 00383 return ERROR_DNS_SUCCESS; 00384 }
DNS_ERROR dns_unmarshall_request | ( | TALLOC_CTX * | mem_ctx, | |
struct dns_buffer * | buf, | |||
struct dns_request ** | preq | |||
) |
dnsmarshall.c の 386 行で定義されています。
参照先 dns_request::additionals・dns_request::answers・dns_request::auths・buf・dns_unmarshall_question()・dns_unmarshall_rr()・dns_unmarshall_uint16()・err・error・dns_request::flags・dns_request::id・dns_request::num_additionals・dns_request::num_answers・dns_request::num_auths・dns_request::num_questions・dns_request::questions.
参照元 dns_negotiate_gss_ctx_int()・dns_transaction()・dns_unmarshall_update_request().
00389 { 00390 struct dns_request *req; 00391 uint16 i; 00392 DNS_ERROR err; 00393 00394 if (!(req = TALLOC_ZERO_P(mem_ctx, struct dns_request))) { 00395 return ERROR_DNS_NO_MEMORY; 00396 } 00397 00398 dns_unmarshall_uint16(buf, &req->id); 00399 dns_unmarshall_uint16(buf, &req->flags); 00400 dns_unmarshall_uint16(buf, &req->num_questions); 00401 dns_unmarshall_uint16(buf, &req->num_answers); 00402 dns_unmarshall_uint16(buf, &req->num_auths); 00403 dns_unmarshall_uint16(buf, &req->num_additionals); 00404 00405 if (!ERR_DNS_IS_OK(buf->error)) goto error; 00406 00407 err = ERROR_DNS_NO_MEMORY; 00408 00409 if ((req->num_questions != 0) && 00410 !(req->questions = TALLOC_ARRAY(req, struct dns_question *, 00411 req->num_questions))) { 00412 goto error; 00413 } 00414 if ((req->num_answers != 0) && 00415 !(req->answers = TALLOC_ARRAY(req, struct dns_rrec *, 00416 req->num_answers))) { 00417 goto error; 00418 } 00419 if ((req->num_auths != 0) && 00420 !(req->auths = TALLOC_ARRAY(req, struct dns_rrec *, 00421 req->num_auths))) { 00422 goto error; 00423 } 00424 if ((req->num_additionals != 0) && 00425 !(req->additionals = TALLOC_ARRAY(req, struct dns_rrec *, 00426 req->num_additionals))) { 00427 goto error; 00428 } 00429 00430 for (i=0; i<req->num_questions; i++) { 00431 dns_unmarshall_question(req->questions, buf, 00432 &req->questions[i]); 00433 } 00434 for (i=0; i<req->num_answers; i++) { 00435 dns_unmarshall_rr(req->answers, buf, 00436 &req->answers[i]); 00437 } 00438 for (i=0; i<req->num_auths; i++) { 00439 dns_unmarshall_rr(req->auths, buf, 00440 &req->auths[i]); 00441 } 00442 for (i=0; i<req->num_additionals; i++) { 00443 dns_unmarshall_rr(req->additionals, buf, 00444 &req->additionals[i]); 00445 } 00446 00447 if (!ERR_DNS_IS_OK(buf->error)) { 00448 err = buf->error; 00449 goto error; 00450 } 00451 00452 *preq = req; 00453 return ERROR_DNS_SUCCESS; 00454 00455 error: 00456 err = buf->error; 00457 TALLOC_FREE(req); 00458 return err; 00459 }
DNS_ERROR dns_marshall_update_request | ( | TALLOC_CTX * | mem_ctx, | |
struct dns_update_request * | update, | |||
struct dns_buffer ** | pbuf | |||
) |
dnsmarshall.c の 508 行で定義されています。
参照先 dns_marshall_request()・dns_update2request().
参照元 dns_sign_update().
00511 { 00512 return dns_marshall_request(mem_ctx, dns_update2request(update), pbuf); 00513 }
DNS_ERROR dns_unmarshall_update_request | ( | TALLOC_CTX * | mem_ctx, | |
struct dns_buffer * | buf, | |||
struct dns_update_request ** | pupreq | |||
) |
dnsmarshall.c の 515 行で定義されています。
参照先 buf・dns_unmarshall_request().
00518 { 00519 /* 00520 * See comments above about portability. If the above works, this will 00521 * as well. 00522 */ 00523 00524 return dns_unmarshall_request(mem_ctx, buf, 00525 (struct dns_request **)(void *)pupreq); 00526 }
struct dns_request* dns_update2request | ( | struct dns_update_request * | update | ) |
dnsmarshall.c の 461 行で定義されています。
参照先 dns_request::additionals・dns_update_request::additionals・dns_request::answers・dns_request::auths・dns_request::flags・dns_update_request::flags・dns_request::id・dns_update_request::id・dns_request::num_additionals・dns_update_request::num_additionals・dns_request::num_answers・dns_request::num_auths・dns_update_request::num_preqs・dns_request::num_questions・dns_update_request::num_updates・dns_update_request::num_zones・dns_update_request::preqs・dns_request::questions・dns_update_request::updates・dns_update_request::zones.
参照元 dns_marshall_update_request()・dns_update_transaction().
00462 { 00463 struct dns_request *req; 00464 00465 /* 00466 * This is a non-specified construct that happens to work on Linux/gcc 00467 * and I would expect it to work everywhere else. dns_request and 00468 * dns_update_request are essentially the same structures with 00469 * different names, so any difference would mean that the compiler 00470 * applied two different variations of padding given the same types in 00471 * the structures. 00472 */ 00473 00474 req = (struct dns_request *)(void *)update; 00475 00476 /* 00477 * The assert statement here looks like we could do the equivalent 00478 * assignments to get portable, but it would mean that we have to 00479 * allocate the dns_question record for the dns_zone records. We 00480 * assume that if this assert works then the same holds true for 00481 * dns_zone<>dns_question as well. 00482 */ 00483 00484 #ifdef DEVELOPER 00485 assert((req->id == update->id) && (req->flags == update->flags) && 00486 (req->num_questions == update->num_zones) && 00487 (req->num_answers == update->num_preqs) && 00488 (req->num_auths == update->num_updates) && 00489 (req->num_additionals == update->num_additionals) && 00490 (req->questions == 00491 (struct dns_question **)(void *)update->zones) && 00492 (req->answers == update->preqs) && 00493 (req->auths == update->updates) && 00494 (req->additionals == update->additionals)); 00495 #endif 00496 00497 return req; 00498 }
struct dns_update_request* dns_request2update | ( | struct dns_request * | request | ) |
dnsmarshall.c の 500 行で定義されています。
00501 { 00502 /* 00503 * For portability concerns see dns_update2request; 00504 */ 00505 return (struct dns_update_request *)(void *)request; 00506 }
uint16 dns_response_code | ( | uint16 | flags | ) |
void display_status | ( | const char * | msg, | |
OM_uint32 | maj_stat, | |||
OM_uint32 | min_stat | |||
) |
参照先 display_status_1().
00076 { 00077 display_status_1( msg, maj_stat, GSS_C_GSS_CODE ); 00078 display_status_1( msg, min_stat, GSS_C_MECH_CODE ); 00079 }
DNS_ERROR dns_negotiate_sec_ctx | ( | const char * | target_realm, | |
const char * | servername, | |||
const char * | keyname, | |||
gss_ctx_id_t * | gss_ctx, | |||
enum dns_ServerType | srv_type | |||
) |
参照先 dns_negotiate_gss_ctx_int()・dns_open_connection()・err・error・strupr()・talloc_asprintf()・talloc_init()・talloc_strdup().
参照元 DoDNSUpdate().
00213 { 00214 OM_uint32 major, minor; 00215 00216 char *upcaserealm, *targetname; 00217 DNS_ERROR err; 00218 00219 gss_buffer_desc input_name; 00220 struct dns_connection *conn; 00221 00222 gss_name_t targ_name; 00223 00224 krb5_principal host_principal; 00225 krb5_context krb_ctx = NULL; 00226 00227 gss_OID_desc nt_host_oid_desc = 00228 { 10, (char *)"\052\206\110\206\367\022\001\002\002\002" }; 00229 00230 TALLOC_CTX *mem_ctx; 00231 00232 if (!(mem_ctx = talloc_init("dns_negotiate_sec_ctx"))) { 00233 return ERROR_DNS_NO_MEMORY; 00234 } 00235 00236 err = dns_open_connection( servername, DNS_TCP, mem_ctx, &conn ); 00237 if (!ERR_DNS_IS_OK(err)) goto error; 00238 00239 if (!(upcaserealm = talloc_strdup(mem_ctx, target_realm))) { 00240 err = ERROR_DNS_NO_MEMORY; 00241 goto error; 00242 } 00243 00244 strupr(upcaserealm); 00245 00246 if (!(targetname = talloc_asprintf(mem_ctx, "dns/%s@%s", 00247 servername, upcaserealm))) { 00248 err = ERROR_DNS_NO_MEMORY; 00249 goto error; 00250 } 00251 00252 krb5_init_context( &krb_ctx ); 00253 krb5_parse_name( krb_ctx, targetname, &host_principal ); 00254 00255 /* don't free the principal until after you call 00256 gss_release_name() or else you'll get a segv 00257 as the krb5_copy_principal() does a structure 00258 copy and not a deep copy. --jerry*/ 00259 00260 input_name.value = &host_principal; 00261 input_name.length = sizeof( host_principal ); 00262 00263 major = gss_import_name( &minor, &input_name, 00264 &nt_host_oid_desc, &targ_name ); 00265 00266 if (major) { 00267 krb5_free_principal( krb_ctx, host_principal ); 00268 krb5_free_context( krb_ctx ); 00269 err = ERROR_DNS_GSS_ERROR; 00270 goto error; 00271 } 00272 00273 err = dns_negotiate_gss_ctx_int(mem_ctx, conn, keyname, 00274 targ_name, gss_ctx, srv_type ); 00275 00276 gss_release_name( &minor, &targ_name ); 00277 00278 /* now we can free the principal */ 00279 00280 krb5_free_principal( krb_ctx, host_principal ); 00281 krb5_free_context( krb_ctx ); 00282 00283 error: 00284 TALLOC_FREE(mem_ctx); 00285 00286 return err; 00287 }
DNS_ERROR dns_sign_update | ( | struct dns_update_request * | req, | |
gss_ctx_id_t | gss_ctx, | |||
const char * | keyname, | |||
const char * | algorithmname, | |||
time_t | time_signed, | |||
uint16 | fudge | |||
) |
参照先 dns_update_request::additionals・buf・dns_add_rrec()・dns_create_tsig_record()・dns_domain_name_from_string()・dns_marshall_domain_name()・dns_marshall_uint16()・dns_marshall_uint32()・dns_marshall_update_request()・err・error・dns_update_request::id・dns_update_request::num_additionals.
参照元 DoDNSUpdate().
00294 { 00295 struct dns_buffer *buf; 00296 DNS_ERROR err; 00297 struct dns_domain_name *key, *algorithm; 00298 struct gss_buffer_desc_struct msg, mic; 00299 OM_uint32 major, minor; 00300 struct dns_rrec *rec; 00301 00302 err = dns_marshall_update_request(req, req, &buf); 00303 if (!ERR_DNS_IS_OK(err)) return err; 00304 00305 err = dns_domain_name_from_string(buf, keyname, &key); 00306 if (!ERR_DNS_IS_OK(err)) goto error; 00307 00308 err = dns_domain_name_from_string(buf, algorithmname, &algorithm); 00309 if (!ERR_DNS_IS_OK(err)) goto error; 00310 00311 dns_marshall_domain_name(buf, key); 00312 dns_marshall_uint16(buf, DNS_CLASS_ANY); 00313 dns_marshall_uint32(buf, 0); /* TTL */ 00314 dns_marshall_domain_name(buf, algorithm); 00315 dns_marshall_uint16(buf, 0); /* Time prefix for 48-bit time_t */ 00316 dns_marshall_uint32(buf, time_signed); 00317 dns_marshall_uint16(buf, fudge); 00318 dns_marshall_uint16(buf, 0); /* error */ 00319 dns_marshall_uint16(buf, 0); /* other len */ 00320 00321 err = buf->error; 00322 if (!ERR_DNS_IS_OK(buf->error)) goto error; 00323 00324 msg.value = (void *)buf->data; 00325 msg.length = buf->offset; 00326 00327 major = gss_get_mic(&minor, gss_ctx, 0, &msg, &mic); 00328 if (major != 0) { 00329 err = ERROR_DNS_GSS_ERROR; 00330 goto error; 00331 } 00332 00333 if (mic.length > 0xffff) { 00334 gss_release_buffer(&minor, &mic); 00335 err = ERROR_DNS_GSS_ERROR; 00336 goto error; 00337 } 00338 00339 err = dns_create_tsig_record(buf, keyname, algorithmname, time_signed, 00340 fudge, mic.length, (uint8 *)mic.value, 00341 req->id, 0, &rec); 00342 gss_release_buffer(&minor, &mic); 00343 if (!ERR_DNS_IS_OK(err)) goto error; 00344 00345 err = dns_add_rrec(req, rec, &req->num_additionals, &req->additionals); 00346 00347 error: 00348 TALLOC_FREE(buf); 00349 return err; 00350 }
DNS_ERROR dns_create_update_request | ( | TALLOC_CTX * | mem_ctx, | |
const char * | domainname, | |||
const char * | hostname, | |||
const struct in_addr * | ip_addr, | |||
size_t | num_adds, | |||
struct dns_update_request ** | preq | |||
) |
dnsrecord.c の 360 行で定義されています。
参照先 dns_add_rrec()・dns_create_a_record()・dns_create_delete_record()・dns_create_rrec()・dns_create_update()・err・error・dns_update_request::num_preqs・dns_update_request::num_updates・dns_update_request::preqs・dns_update_request::updates.
参照元 DoDNSUpdate().
00366 { 00367 struct dns_update_request *req; 00368 struct dns_rrec *rec; 00369 DNS_ERROR err; 00370 size_t i; 00371 00372 err = dns_create_update(mem_ctx, domainname, &req); 00373 if (!ERR_DNS_IS_OK(err)) return err; 00374 00375 /* 00376 * The zone must be used at all 00377 */ 00378 00379 err = dns_create_rrec(req, domainname, QTYPE_ANY, DNS_CLASS_ANY, 00380 0, 0, NULL, &rec); 00381 if (!ERR_DNS_IS_OK(err)) goto error; 00382 00383 err = dns_add_rrec(req, rec, &req->num_preqs, &req->preqs); 00384 if (!ERR_DNS_IS_OK(err)) goto error; 00385 00386 /* 00387 * Delete any existing A records 00388 */ 00389 00390 err = dns_create_delete_record(req, hostname, QTYPE_A, DNS_CLASS_ANY, 00391 &rec); 00392 if (!ERR_DNS_IS_OK(err)) goto error; 00393 00394 err = dns_add_rrec(req, rec, &req->num_updates, &req->updates); 00395 if (!ERR_DNS_IS_OK(err)) goto error; 00396 00397 /* 00398 * .. and add our IPs 00399 */ 00400 00401 for ( i=0; i<num_addrs; i++ ) { 00402 err = dns_create_a_record(req, hostname, 3600, ip_addrs[i], &rec); 00403 if (!ERR_DNS_IS_OK(err)) 00404 goto error; 00405 00406 err = dns_add_rrec(req, rec, &req->num_updates, &req->updates); 00407 if (!ERR_DNS_IS_OK(err)) 00408 goto error; 00409 } 00410 00411 *preq = req; 00412 return ERROR_DNS_SUCCESS; 00413 00414 error: 00415 TALLOC_FREE(req); 00416 return err; 00417 }