~ubuntu-branches/ubuntu/trusty/erlang/trusty

« back to all changes in this revision

Viewing changes to lib/ssh/src/ssh_file.erl

  • Committer: Bazaar Package Importer
  • Author(s): Clint Byrum
  • Date: 2011-05-05 15:48:43 UTC
  • mfrom: (3.5.13 sid)
  • Revision ID: james.westby@ubuntu.com-20110505154843-0om6ekzg6m7ugj27
Tags: 1:14.b.2-dfsg-3ubuntu1
* Merge from debian unstable.  Remaining changes:
  - Drop libwxgtk2.8-dev build dependency. Wx isn't in main, and not
    supposed to.
  - Drop erlang-wx binary.
  - Drop erlang-wx dependency from -megaco, -common-test, and -reltool, they
    do not really need wx. Also drop it from -debugger; the GUI needs wx,
    but it apparently has CLI bits as well, and is also needed by -megaco,
    so let's keep the package for now.
  - debian/patches/series: Do what I meant, and enable build-options.patch
    instead.
* Additional changes:
  - Drop erlang-wx from -et
* Dropped Changes:
  - patches/pcre-crash.patch: CVE-2008-2371: outer level option with
    alternatives caused crash. (Applied Upstream)
  - fix for ssl certificate verification in newSSL: 
    ssl_cacertfile_fix.patch (Applied Upstream)
  - debian/patches/series: Enable native.patch again, to get stripped beam
    files and reduce the package size again. (build-options is what
    actually accomplished this)
  - Remove build-options.patch on advice from upstream and because it caused
    odd build failures.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
%%
2
2
%% %CopyrightBegin%
3
 
%% 
4
 
%% Copyright Ericsson AB 2005-2009. All Rights Reserved.
5
 
%% 
 
3
%%
 
4
%% Copyright Ericsson AB 2005-2011. All Rights Reserved.
 
5
%%
6
6
%% The contents of this file are subject to the Erlang Public License,
7
7
%% Version 1.1, (the "License"); you may not use this file except in
8
8
%% compliance with the License. You should have received a copy of the
9
9
%% Erlang Public License along with this software. If not, it can be
10
10
%% retrieved online at http://www.erlang.org/.
11
 
%% 
 
11
%%
12
12
%% Software distributed under the License is distributed on an "AS IS"
13
13
%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
14
14
%% the License for the specific language governing rights and limitations
15
15
%% under the License.
16
 
%% 
 
16
%%
17
17
%% %CopyrightEnd%
18
18
%%
19
19
 
27
27
-include("PKCS-1.hrl").
28
28
-include("DSS.hrl").
29
29
 
 
30
-include_lib("kernel/include/file.hrl").
 
31
 
30
32
-export([public_host_dsa_key/2,private_host_dsa_key/2,
31
33
         public_host_rsa_key/2,private_host_rsa_key/2,
32
34
         public_host_key/2,private_host_key/2,
33
35
         lookup_host_key/3, add_host_key/3, % del_host_key/2,
34
36
         lookup_user_key/3, ssh_dir/2, file_name/3]).
35
37
 
36
 
-export([private_identity_key/2]).
37
 
%% , public_identity_key/2,
 
38
-export([private_identity_key/2, 
 
39
         public_identity_key/2]).
38
40
%%       identity_keys/2]).
39
41
 
40
42
-export([encode_public_key/1, decode_public_key_v2/2]).
43
45
 
44
46
-define(DBG_PATHS, true).
45
47
 
 
48
-define(PERM_700, 8#700).
 
49
-define(PERM_644, 8#644).
 
50
 
46
51
%% API
47
52
public_host_dsa_key(Type, Opts) ->
48
53
    File = file_name(Type, "ssh_host_dsa_key.pub", Opts),
113
118
 
114
119
add_host_key(Host, Key, Opts) ->
115
120
    Host1 = add_ip(replace_localhost(Host)),
116
 
    case file:open(file_name(user, "known_hosts", Opts),[write,append]) of
 
121
    KnownHosts = file_name(user, "known_hosts", Opts),
 
122
    case file:open(KnownHosts, [write,append]) of
117
123
        {ok, Fd} ->
 
124
            ok = file:change_mode(KnownHosts, ?PERM_644),
118
125
            Res = add_key_fd(Fd, Host1, Key),
119
126
            file:close(Fd),
120
127
            Res;
140
147
    Path = file_name(user, identity_key_filename(Alg), Opts),
141
148
    read_private_key_v2(Path, Alg).
142
149
 
 
150
public_identity_key(Alg, Opts) ->
 
151
    Path = file_name(user, identity_key_filename(Alg) ++ ".pub", Opts),
 
152
    read_public_key_v2(Path, Alg).
 
153
 
 
154
 
143
155
read_public_key_v2(File, Type) ->
144
156
    case file:read_file(File) of
145
157
        {ok,Bin} ->
198
210
%% pem_type("ssh-rsa") -> "RSA".
199
211
 
200
212
read_private_key_v2(File, Type) ->
201
 
     case catch (public_key:pem_to_der(File)) of
202
 
         {ok, [{_, Bin, not_encrypted}]} ->
203
 
             decode_private_key_v2(Bin, Type);
204
 
         Error -> %% Note we do not handle password encrypted keys at the moment
205
 
             {error, Error}
206
 
     end.
 
213
    case file:read_file(File) of
 
214
        {ok, PemBin} ->
 
215
            case catch (public_key:pem_decode(PemBin)) of
 
216
                [{_, Bin, not_encrypted}] ->
 
217
                    decode_private_key_v2(Bin, Type);
 
218
                Error -> %% Note we do not handle password encrypted keys at the moment
 
219
                    {error, Error}
 
220
            end;
 
221
        {error, Reason} ->
 
222
            {error, Reason}
 
223
    end.
207
224
%%  case file:read_file(File) of
208
225
%%      {ok,Bin} ->
209
226
%%          case read_pem(binary_to_list(Bin), pem_type(Type)) of
527
544
 
528
545
default_user_dir()->
529
546
    {ok,[[Home|_]]} = init:get_argument(home),
530
 
    filename:join(Home, ".ssh").
 
547
    UserDir = filename:join(Home, ".ssh"),
 
548
    ok = filelib:ensure_dir(filename:join(UserDir, "dummy")),
 
549
    ok = file:change_mode(UserDir, ?PERM_700),
 
550
    UserDir.