~ubuntu-branches/debian/jessie/sflphone/jessie

« back to all changes in this revision

Viewing changes to daemon/libs/pjproject/pjlib/src/pj/ssl_sock_dump.c

  • Committer: Package Import Robot
  • Author(s): Mark Purcell
  • Date: 2013-06-02 18:04:11 UTC
  • mfrom: (1.1.9)
  • Revision ID: package-import@ubuntu.com-20130602180411-3rcpy8c1zdlo8y0s
Tags: 1.2.2-1
* New upstream release
* changeset_rb68857a4b485b7d43f92714cd5792595ff895f82.diff - fix QTest
* pjproject ./configure --disable-sound --disable-video

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* $Id: ssl_sock_dump.c 3553 2011-05-05 06:14:19Z nanang $ */
2
 
/* 
3
 
 * Copyright (C) 2009-2011 Teluu Inc. (http://www.teluu.com)
4
 
 *
5
 
 * This program is free software; you can redistribute it and/or modify
6
 
 * it under the terms of the GNU General Public License as published by
7
 
 * the Free Software Foundation; either version 2 of the License, or
8
 
 * (at your option) any later version.
9
 
 *
10
 
 * This program is distributed in the hope that it will be useful,
11
 
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 
 * GNU General Public License for more details.
14
 
 *
15
 
 * You should have received a copy of the GNU General Public License
16
 
 * along with this program; if not, write to the Free Software
17
 
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA 
18
 
 */
19
 
#include <pj/ssl_sock.h>
20
 
#include <pj/errno.h>
21
 
#include <pj/os.h>
22
 
#include <pj/string.h>
23
 
 
24
 
 
25
 
/* Only build when PJ_HAS_SSL_SOCK is enabled */
26
 
#if defined(PJ_HAS_SSL_SOCK) && PJ_HAS_SSL_SOCK!=0
27
 
 
28
 
#define THIS_FILE       "ssl_sock_dump.c"
29
 
 
30
 
#define CHECK_BUF_LEN()                                         \
31
 
    if ((len < 0) || (len >= end-p)) {                          \
32
 
        *p = '\0';                                              \
33
 
        return -1;                                              \
34
 
    }                                                           \
35
 
    p += len;
36
 
 
37
 
PJ_DEF(pj_ssize_t) pj_ssl_cert_info_dump(const pj_ssl_cert_info *ci,
38
 
                                         const char *indent,
39
 
                                         char *buf,
40
 
                                         pj_size_t buf_size)
41
 
{
42
 
    const char *wdays[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
43
 
    pj_parsed_time pt1;
44
 
    pj_parsed_time pt2;
45
 
    unsigned i;
46
 
    int len = 0;
47
 
    char *p, *end;
48
 
 
49
 
    p = buf;
50
 
    end = buf + buf_size;
51
 
 
52
 
    pj_time_decode(&ci->validity.start, &pt1);
53
 
    pj_time_decode(&ci->validity.end, &pt2);
54
 
 
55
 
    /* Version */
56
 
    len = pj_ansi_snprintf(p, end-p, "%sVersion    : v%d\n", 
57
 
                           indent, ci->version);
58
 
    CHECK_BUF_LEN();
59
 
    
60
 
    /* Serial number */
61
 
    len = pj_ansi_snprintf(p, end-p, "%sSerial     : ", indent);
62
 
    CHECK_BUF_LEN();
63
 
 
64
 
    for (i = 0; i < sizeof(ci->serial_no) && !ci->serial_no[i]; ++i);
65
 
    for (; i < sizeof(ci->serial_no); ++i) {
66
 
        len = pj_ansi_snprintf(p, end-p, "%02X ", ci->serial_no[i]);
67
 
        CHECK_BUF_LEN();
68
 
    }
69
 
    *(p-1) = '\n';
70
 
    
71
 
    /* Subject */
72
 
    len = pj_ansi_snprintf( p, end-p, "%sSubject    : %.*s\n", indent,
73
 
                            (int)ci->subject.cn.slen,
74
 
                            ci->subject.cn.ptr);
75
 
    CHECK_BUF_LEN();
76
 
    len = pj_ansi_snprintf( p, end-p, "%s             %.*s\n", indent,
77
 
                            (int)ci->subject.info.slen,
78
 
                            ci->subject.info.ptr);
79
 
    CHECK_BUF_LEN();
80
 
 
81
 
    /* Issuer */
82
 
    len = pj_ansi_snprintf( p, end-p, "%sIssuer     : %.*s\n", indent,
83
 
                            (int)ci->issuer.cn.slen,
84
 
                            ci->issuer.cn.ptr);
85
 
    CHECK_BUF_LEN();
86
 
    len = pj_ansi_snprintf( p, end-p, "%s             %.*s\n", indent,
87
 
                            (int)ci->issuer.info.slen,
88
 
                            ci->issuer.info.ptr);
89
 
    CHECK_BUF_LEN();
90
 
 
91
 
    /* Validity period */
92
 
    len = pj_ansi_snprintf( p, end-p, "%sValid from : %s %4d-%02d-%02d "
93
 
                            "%02d:%02d:%02d.%03d %s\n", indent,
94
 
                            wdays[pt1.wday], pt1.year, pt1.mon+1, pt1.day,
95
 
                            pt1.hour, pt1.min, pt1.sec, pt1.msec,
96
 
                            (ci->validity.gmt? "GMT":""));
97
 
    CHECK_BUF_LEN();
98
 
 
99
 
    len = pj_ansi_snprintf( p, end-p, "%sValid to   : %s %4d-%02d-%02d "
100
 
                            "%02d:%02d:%02d.%03d %s\n", indent,
101
 
                            wdays[pt2.wday], pt2.year, pt2.mon+1, pt2.day,
102
 
                            pt2.hour, pt2.min, pt2.sec, pt2.msec,
103
 
                            (ci->validity.gmt? "GMT":""));
104
 
    CHECK_BUF_LEN();
105
 
 
106
 
    /* Subject alternative name extension */
107
 
    if (ci->subj_alt_name.cnt) {
108
 
        unsigned i;
109
 
 
110
 
        len = pj_ansi_snprintf(p, end-p, "%ssubjectAltName extension\n", 
111
 
                               indent);
112
 
        CHECK_BUF_LEN();
113
 
 
114
 
        for (i = 0; i < ci->subj_alt_name.cnt; ++i) {
115
 
            const char *type = NULL;
116
 
 
117
 
            switch(ci->subj_alt_name.entry[i].type) {
118
 
            case PJ_SSL_CERT_NAME_RFC822:
119
 
                type = "MAIL";
120
 
                break;
121
 
            case PJ_SSL_CERT_NAME_DNS:
122
 
                type = " DNS";
123
 
                break;
124
 
            case PJ_SSL_CERT_NAME_URI:
125
 
                type = " URI";
126
 
                break;
127
 
            case PJ_SSL_CERT_NAME_IP:
128
 
                type = "  IP";
129
 
                break;
130
 
            default:
131
 
                break;
132
 
            }
133
 
            if (type) {
134
 
                len = pj_ansi_snprintf( p, end-p, "%s      %s : %.*s\n", indent, 
135
 
                                        type, 
136
 
                                        (int)ci->subj_alt_name.entry[i].name.slen,
137
 
                                        ci->subj_alt_name.entry[i].name.ptr);
138
 
                CHECK_BUF_LEN();
139
 
            }
140
 
        }
141
 
    }
142
 
 
143
 
    return (p-buf);
144
 
}
145
 
 
146
 
 
147
 
#endif  /* PJ_HAS_SSL_SOCK */
148