mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-05 20:20:07 +00:00
Enable Asterisk to register with itself (with authentication)
git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@1418 65c4cc65-6c06-0410-ace0-fbb531ad65f3
This commit is contained in:
@@ -125,7 +125,7 @@ static char ourhost[256];
|
||||
static struct in_addr __ourip;
|
||||
static int ourport;
|
||||
|
||||
static int sipdebug = 0;
|
||||
static int sipdebug = 1;
|
||||
|
||||
static int tos = 0;
|
||||
|
||||
@@ -2802,7 +2802,7 @@ static int transmit_notify(struct sip_pvt *p, int newmsgs, int oldmsgs)
|
||||
return send_request(p, &req, 1, p->ocseq);
|
||||
}
|
||||
|
||||
static int transmit_register(struct sip_registry *r, char *cmd, char *auth);
|
||||
static int transmit_register(struct sip_registry *r, char *cmd, char *auth, char *authheader);
|
||||
|
||||
static int sip_reregister(void *data)
|
||||
{
|
||||
@@ -2818,7 +2818,7 @@ static int sip_do_register(struct sip_registry *r)
|
||||
{
|
||||
int res;
|
||||
ast_mutex_lock(&r->lock);
|
||||
res=transmit_register(r, "REGISTER", NULL);
|
||||
res=transmit_register(r, "REGISTER", NULL, NULL);
|
||||
ast_mutex_unlock(&r->lock);
|
||||
return res;
|
||||
}
|
||||
@@ -2841,12 +2841,12 @@ static int sip_reg_timeout(void *data)
|
||||
}
|
||||
r->regstate=REG_STATE_UNREGISTERED;
|
||||
r->timeout = -1;
|
||||
res=transmit_register(r, "REGISTER", NULL);
|
||||
res=transmit_register(r, "REGISTER", NULL, NULL);
|
||||
ast_mutex_unlock(&r->lock);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int transmit_register(struct sip_registry *r, char *cmd, char *auth)
|
||||
static int transmit_register(struct sip_registry *r, char *cmd, char *auth, char *authheader)
|
||||
{
|
||||
struct sip_request req;
|
||||
char from[256];
|
||||
@@ -2929,7 +2929,7 @@ static int transmit_register(struct sip_registry *r, char *cmd, char *auth)
|
||||
add_header(&req, "CSeq", tmp);
|
||||
add_header(&req, "User-Agent", "Asterisk PBX");
|
||||
if (auth)
|
||||
add_header(&req, "Authorization", auth);
|
||||
add_header(&req, authheader, auth);
|
||||
|
||||
snprintf(tmp, sizeof(tmp), "%d", default_expiry);
|
||||
add_header(&req, "Expires", tmp);
|
||||
@@ -4086,15 +4086,15 @@ static int sip_no_debug(int fd, int argc, char *argv[])
|
||||
|
||||
static int reply_digest(struct sip_pvt *p, struct sip_request *req, char *header, char *orig_header, char *digest, int digest_len);
|
||||
|
||||
static int do_register_auth(struct sip_pvt *p, struct sip_request *req) {
|
||||
static int do_register_auth(struct sip_pvt *p, struct sip_request *req, char *header, char *respheader) {
|
||||
char digest[256];
|
||||
p->authtries++;
|
||||
memset(digest,0,sizeof(digest));
|
||||
if (reply_digest(p,req, "WWW-Authenticate", "REGISTER", digest, sizeof(digest))) {
|
||||
if (reply_digest(p,req, header, "REGISTER", digest, sizeof(digest))) {
|
||||
/* There's nothing to use for authentication */
|
||||
return -1;
|
||||
}
|
||||
return transmit_register(p->registry,"REGISTER",digest);
|
||||
return transmit_register(p->registry,"REGISTER",digest, respheader);
|
||||
}
|
||||
|
||||
static int do_proxy_auth(struct sip_pvt *p, struct sip_request *req, char *msg, int init) {
|
||||
@@ -4438,7 +4438,7 @@ static void handle_response(struct sip_pvt *p, int resp, char *rest, struct sip_
|
||||
break;
|
||||
case 401: /* Not authorized on REGISTER */
|
||||
if (p->registry && !strcasecmp(msg, "REGISTER")) {
|
||||
if ((p->authtries > 1) || do_register_auth(p, req)) {
|
||||
if ((p->authtries > 1) || do_register_auth(p, req, "WWW-Authenticate", "Authorization")) {
|
||||
ast_log(LOG_NOTICE, "Failed to authenticate on REGISTER to '%s'\n", get_header(&p->initreq, "From"));
|
||||
p->needdestroy = 1;
|
||||
}
|
||||
@@ -4463,8 +4463,8 @@ static void handle_response(struct sip_pvt *p, int resp, char *rest, struct sip_
|
||||
p->needdestroy = 1;
|
||||
}
|
||||
} else if (p->registry && !strcasecmp(msg, "REGISTER")) {
|
||||
if ((p->authtries > 1) || do_register_auth(p, req)) {
|
||||
ast_log(LOG_NOTICE, "Failed to authenticate on REGISTER to '%s'\n", get_header(&p->initreq, "From"));
|
||||
if ((p->authtries > 1) || do_register_auth(p, req, "Proxy-Authenticate", "Proxy-Authorization")) {
|
||||
ast_log(LOG_NOTICE, "Failed to authenticate on REGISTER to '%s' (tries '%d')\n", get_header(&p->initreq, "From"), p->authtries);
|
||||
p->needdestroy = 1;
|
||||
}
|
||||
} else
|
||||
|
Reference in New Issue
Block a user