~ubuntu-branches/ubuntu/lucid/mysql-dfsg-5.1/lucid-security

« back to all changes in this revision

Viewing changes to cmd-line-utils/libedit/sig.c

  • Committer: Package Import Robot
  • Author(s): Marc Deslauriers
  • Date: 2012-02-22 22:33:55 UTC
  • mfrom: (1.1.5)
  • Revision ID: package-import@ubuntu.com-20120222223355-or06x1euyk8n0ldi
Tags: 5.1.61-0ubuntu0.10.04.1
* SECURITY UPDATE: Update to 5.1.61 to fix multiple security issues
  (LP: #937869)
  - http://www.oracle.com/technetwork/topics/security/cpujan2012-366304.html
  - CVE-2011-2262
  - CVE-2012-0075
  - CVE-2012-0112
  - CVE-2012-0113
  - CVE-2012-0114
  - CVE-2012-0115
  - CVE-2012-0116
  - CVE-2012-0117
  - CVE-2012-0118
  - CVE-2012-0119
  - CVE-2012-0120
  - CVE-2012-0484
  - CVE-2012-0485
  - CVE-2012-0486
  - CVE-2012-0487
  - CVE-2012-0488
  - CVE-2012-0489
  - CVE-2012-0490
  - CVE-2012-0491
  - CVE-2012-0492
  - CVE-2012-0493
  - CVE-2012-0494
  - CVE-2012-0495
  - CVE-2012-0496
* Dropped patches unnecessary with 5.1.61:
  - debian/patches/90_mysql_safer_strmov.dpatch
  - debian/patches/51_ssl_test_certs.dpatch
  - debian/patches/52_CVE-2009-4030.dpatch
  - debian/patches/53_CVE-2009-4484.dpatch
  - debian/patches/54_CVE-2008-7247.dpatch
  - debian/patches/55_CVE-2010-1621.dpatch
  - debian/patches/56_CVE-2010-1850.dpatch
  - debian/patches/57_CVE-2010-1849.dpatch
  - debian/patches/58_CVE-2010-1848.dpatch
  - debian/patches/59_CVE-2010-1626.dpatch
  - debian/patches/60_CVE-2010-2008.dpatch
  - debian/patches/60_CVE-2010-3677.dpatch
  - debian/patches/60_CVE-2010-3678.dpatch
  - debian/patches/60_CVE-2010-3679.dpatch
  - debian/patches/60_CVE-2010-3680.dpatch
  - debian/patches/60_CVE-2010-3681.dpatch
  - debian/patches/60_CVE-2010-3682.dpatch
  - debian/patches/60_CVE-2010-3683.dpatch
  - debian/patches/60_CVE-2010-3833.dpatch
  - debian/patches/60_CVE-2010-3834.dpatch
  - debian/patches/60_CVE-2010-3835.dpatch
  - debian/patches/60_CVE-2010-3836.dpatch
  - debian/patches/60_CVE-2010-3837.dpatch
  - debian/patches/60_CVE-2010-3838.dpatch
  - debian/patches/60_CVE-2010-3839.dpatch
  - debian/patches/60_CVE-2010-3840.dpatch
  - debian/patches/61_disable_longfilename_test.dpatch
  - debian/patches/62_alter_table_fix.dpatch
  - debian/patches/63_cherrypick-upstream-49479.dpatch
  - debian/patches/10_readline_build_fix.dpatch
* debian/mysql-client-5.1.docs: removed EXCEPTIONS-CLIENT file
* debian/mysql-server-5.1.docs,debian/libmysqlclient16.docs,
  debian/libmysqlclient-dev.docs: removed, no longer necessary.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*      $NetBSD: sig.c,v 1.12 2008/09/10 15:45:37 christos Exp $        */
 
1
/*      $NetBSD: sig.c,v 1.17 2011/07/28 20:50:55 christos Exp $        */
2
2
 
3
3
/*-
4
4
 * Copyright (c) 1992, 1993
57
57
        - 1
58
58
};
59
59
 
60
 
private void el_sig_handler(int);
 
60
private void sig_handler(int);
61
61
 
62
 
/* el_sig_handler():
 
62
/* sig_handler():
63
63
 *      This is the handler called for all signals
64
64
 *      XXX: we cannot pass any data so we just store the old editline
65
65
 *      state in a private variable
66
66
 */
67
67
private void
68
 
el_sig_handler(int signo)
 
68
sig_handler(int signo)
69
69
{
70
70
        int i;
71
71
        sigset_t nset, oset;
74
74
        (void) sigaddset(&nset, signo);
75
75
        (void) sigprocmask(SIG_BLOCK, &nset, &oset);
76
76
 
 
77
        sel->el_signal->sig_no = signo;
 
78
 
77
79
        switch (signo) {
78
80
        case SIGCONT:
79
81
                tty_rawmode(sel);
80
82
                if (ed_redisplay(sel, 0) == CC_REFRESH)
81
83
                        re_refresh(sel);
82
 
                term__flush(sel);
 
84
                terminal__flush(sel);
83
85
                break;
84
86
 
85
87
        case SIGWINCH:
95
97
                if (signo == sighdl[i])
96
98
                        break;
97
99
 
98
 
        (void) signal(signo, sel->el_signal[i]);
 
100
        (void) sigaction(signo, &sel->el_signal->sig_action[i], NULL);
 
101
        sel->el_signal->sig_action[i].sa_handler = SIG_ERR;
 
102
        sel->el_signal->sig_action[i].sa_flags = 0;
 
103
        sigemptyset(&sel->el_signal->sig_action[i].sa_mask);
99
104
        (void) sigprocmask(SIG_SETMASK, &oset, NULL);
100
105
        (void) kill(0, signo);
101
106
}
107
112
protected int
108
113
sig_init(EditLine *el)
109
114
{
110
 
        int i;
111
 
        sigset_t nset, oset;
112
 
 
113
 
        (void) sigemptyset(&nset);
114
 
#define _DO(a) (void) sigaddset(&nset, a);
115
 
        ALLSIGS
116
 
#undef  _DO
117
 
            (void) sigprocmask(SIG_BLOCK, &nset, &oset);
118
 
 
119
 
#define SIGSIZE (sizeof(sighdl) / sizeof(sighdl[0]) * sizeof(el_signalhandler_t))
120
 
 
121
 
        el->el_signal = (el_signalhandler_t *) el_malloc(SIGSIZE);
 
115
        size_t i;
 
116
        sigset_t *nset, oset;
 
117
 
 
118
        el->el_signal = el_malloc(sizeof(*el->el_signal));
122
119
        if (el->el_signal == NULL)
123
 
                return (-1);
124
 
        for (i = 0; sighdl[i] != -1; i++)
125
 
                el->el_signal[i] = SIG_ERR;
 
120
                return -1;
 
121
 
 
122
        nset = &el->el_signal->sig_set;
 
123
        (void) sigemptyset(nset);
 
124
#define _DO(a) (void) sigaddset(nset, a);
 
125
        ALLSIGS
 
126
#undef  _DO
 
127
        (void) sigprocmask(SIG_BLOCK, nset, &oset);
 
128
 
 
129
        for (i = 0; sighdl[i] != -1; i++) {
 
130
                el->el_signal->sig_action[i].sa_handler = SIG_ERR;
 
131
                el->el_signal->sig_action[i].sa_flags = 0;
 
132
                sigemptyset(&el->el_signal->sig_action[i].sa_mask);
 
133
        }
126
134
 
127
135
        (void) sigprocmask(SIG_SETMASK, &oset, NULL);
128
136
 
129
 
        return (0);
 
137
        return 0;
130
138
}
131
139
 
132
140
 
137
145
sig_end(EditLine *el)
138
146
{
139
147
 
140
 
        el_free((ptr_t) el->el_signal);
 
148
        el_free(el->el_signal);
141
149
        el->el_signal = NULL;
142
150
}
143
151
 
148
156
protected void
149
157
sig_set(EditLine *el)
150
158
{
151
 
        int i;
152
 
        sigset_t nset, oset;
153
 
 
154
 
        (void) sigemptyset(&nset);
155
 
#define _DO(a) (void) sigaddset(&nset, a);
156
 
        ALLSIGS
157
 
#undef  _DO
158
 
            (void) sigprocmask(SIG_BLOCK, &nset, &oset);
 
159
        size_t i;
 
160
        sigset_t oset;
 
161
        struct sigaction osa, nsa;
 
162
 
 
163
        nsa.sa_handler = sig_handler;
 
164
        nsa.sa_flags = 0;
 
165
        sigemptyset(&nsa.sa_mask);
 
166
 
 
167
        (void) sigprocmask(SIG_BLOCK, &el->el_signal->sig_set, &oset);
159
168
 
160
169
        for (i = 0; sighdl[i] != -1; i++) {
161
 
                el_signalhandler_t s;
162
170
                /* This could happen if we get interrupted */
163
 
                if ((s = signal(sighdl[i], el_sig_handler)) != el_sig_handler)
164
 
                        el->el_signal[i] = s;
 
171
                if (sigaction(sighdl[i], &nsa, &osa) != -1 &&
 
172
                    osa.sa_handler != sig_handler)
 
173
                        el->el_signal->sig_action[i] = osa;
165
174
        }
166
175
        sel = el;
167
176
        (void) sigprocmask(SIG_SETMASK, &oset, NULL);
174
183
protected void
175
184
sig_clr(EditLine *el)
176
185
{
177
 
        int i;
178
 
        sigset_t nset, oset;
 
186
        size_t i;
 
187
        sigset_t oset;
179
188
 
180
 
        (void) sigemptyset(&nset);
181
 
#define _DO(a) (void) sigaddset(&nset, a);
182
 
        ALLSIGS
183
 
#undef  _DO
184
 
            (void) sigprocmask(SIG_BLOCK, &nset, &oset);
 
189
        (void) sigprocmask(SIG_BLOCK, &el->el_signal->sig_set, &oset);
185
190
 
186
191
        for (i = 0; sighdl[i] != -1; i++)
187
 
                if (el->el_signal[i] != SIG_ERR)
188
 
                        (void) signal(sighdl[i], el->el_signal[i]);
 
192
                if (el->el_signal->sig_action[i].sa_handler != SIG_ERR)
 
193
                        (void)sigaction(sighdl[i],
 
194
                            &el->el_signal->sig_action[i], NULL);
189
195
 
190
196
        sel = NULL;             /* we are going to die if the handler is
191
197
                                 * called */
192
 
        (void) sigprocmask(SIG_SETMASK, &oset, NULL);
 
198
        (void)sigprocmask(SIG_SETMASK, &oset, NULL);
193
199
}