~ubuntu-branches/debian/lenny/dropbear/lenny

« back to all changes in this revision

Viewing changes to cli-main.c

  • Committer: Bazaar Package Importer
  • Author(s): Gerrit Pape
  • Date: 2005-05-25 22:38:17 UTC
  • mfrom: (1.2.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20050525223817-fdl653extybmz1zb
Tags: 0.45-3
* debian/dropbear.init: init script prints human readable message in case
  it's disabled (closes: #309099).
* debian/dropbear.postinst: configure: restart service through init script
  instead of start.
* debian/dropbear.prerm: set -u -> set -e.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Dropbear - a SSH2 server
 
3
 * SSH client implementation
 
4
 * 
 
5
 * Copyright (c) 2002,2003 Matt Johnston
 
6
 * Copyright (c) 2004 by Mihnea Stoenescu
 
7
 * All rights reserved.
 
8
 * 
 
9
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 
10
 * of this software and associated documentation files (the "Software"), to deal
 
11
 * in the Software without restriction, including without limitation the rights
 
12
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 
13
 * copies of the Software, and to permit persons to whom the Software is
 
14
 * furnished to do so, subject to the following conditions:
 
15
 * 
 
16
 * The above copyright notice and this permission notice shall be included in
 
17
 * all copies or substantial portions of the Software.
 
18
 * 
 
19
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 
20
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 
21
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 
22
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 
23
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 
24
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 
25
 * SOFTWARE. */
 
26
 
 
27
#include "includes.h"
 
28
#include "dbutil.h"
 
29
#include "runopts.h"
 
30
#include "session.h"
 
31
 
 
32
static void cli_dropbear_exit(int exitcode, const char* format, va_list param);
 
33
static void cli_dropbear_log(int priority, const char* format, va_list param);
 
34
 
 
35
#if defined(DBMULTI_dbclient) || !defined(DROPBEAR_MULTI)
 
36
#if defined(DBMULTI_dbclient) && defined(DROPBEAR_MULTI)
 
37
int cli_main(int argc, char ** argv) {
 
38
#else
 
39
int main(int argc, char ** argv) {
 
40
#endif
 
41
 
 
42
        int sock;
 
43
        char* error = NULL;
 
44
        char* hostandport;
 
45
        int len;
 
46
 
 
47
        _dropbear_exit = cli_dropbear_exit;
 
48
        _dropbear_log = cli_dropbear_log;
 
49
 
 
50
        cli_getopts(argc, argv);
 
51
 
 
52
        TRACE(("user='%s' host='%s' port='%s'", cli_opts.username,
 
53
                                cli_opts.remotehost, cli_opts.remoteport))
 
54
 
 
55
        if (signal(SIGPIPE, SIG_IGN) == SIG_ERR) {
 
56
                dropbear_exit("signal() error");
 
57
        }
 
58
 
 
59
        sock = connect_remote(cli_opts.remotehost, cli_opts.remoteport, 
 
60
                        0, &error);
 
61
 
 
62
        if (sock < 0) {
 
63
                dropbear_exit("%s", error);
 
64
        }
 
65
 
 
66
        /* Set up the host:port log */
 
67
        len = strlen(cli_opts.remotehost);
 
68
        len += 10; /* 16 bit port and leeway*/
 
69
        hostandport = (char*)m_malloc(len);
 
70
        snprintf(hostandport, len, "%s:%s", 
 
71
                        cli_opts.remotehost, cli_opts.remoteport);
 
72
 
 
73
        cli_session(sock, hostandport);
 
74
 
 
75
        /* not reached */
 
76
        return -1;
 
77
}
 
78
#endif /* DBMULTI stuff */
 
79
 
 
80
static void cli_dropbear_exit(int exitcode, const char* format, va_list param) {
 
81
 
 
82
        char fmtbuf[300];
 
83
 
 
84
        if (!sessinitdone) {
 
85
                snprintf(fmtbuf, sizeof(fmtbuf), "exited: %s",
 
86
                                format);
 
87
        } else {
 
88
                snprintf(fmtbuf, sizeof(fmtbuf), 
 
89
                                "connection to %s@%s:%s exited: %s", 
 
90
                                cli_opts.username, cli_opts.remotehost, 
 
91
                                cli_opts.remoteport, format);
 
92
        }
 
93
 
 
94
        /* Do the cleanup first, since then the terminal will be reset */
 
95
        cli_session_cleanup();
 
96
        common_session_cleanup();
 
97
 
 
98
        _dropbear_log(LOG_INFO, fmtbuf, param);
 
99
 
 
100
        exit(exitcode);
 
101
}
 
102
 
 
103
static void cli_dropbear_log(int UNUSED(priority), 
 
104
                const char* format, va_list param) {
 
105
 
 
106
        char printbuf[1024];
 
107
 
 
108
        vsnprintf(printbuf, sizeof(printbuf), format, param);
 
109
 
 
110
        fprintf(stderr, "%s: %s\n", cli_opts.progname, printbuf);
 
111
 
 
112
}