Jiri Simsa | d7616c9 | 2015-03-24 23:44:30 -0700 | [diff] [blame] | 1 | // Copyright 2015 The Vanadium Authors. All rights reserved. |
| 2 | // Use of this source code is governed by a BSD-style |
| 3 | // license that can be found in the LICENSE file. |
| 4 | |
Cosmos Nicolaou | bbae388 | 2014-10-02 22:58:19 -0700 | [diff] [blame] | 5 | package modules |
| 6 | |
| 7 | import ( |
Cosmos Nicolaou | bbae388 | 2014-10-02 22:58:19 -0700 | [diff] [blame] | 8 | "fmt" |
Bogdan Caprita | 490a451 | 2014-11-20 21:12:19 -0800 | [diff] [blame] | 9 | "hash/adler32" |
Cosmos Nicolaou | bbae388 | 2014-10-02 22:58:19 -0700 | [diff] [blame] | 10 | "io" |
| 11 | "io/ioutil" |
| 12 | "os" |
Bogdan Caprita | 490a451 | 2014-11-20 21:12:19 -0800 | [diff] [blame] | 13 | |
Jiri Simsa | 6ac9522 | 2015-02-23 16:11:49 -0800 | [diff] [blame] | 14 | "v.io/v23/security" |
Cosmos Nicolaou | e3b1932 | 2015-06-18 16:05:08 -0700 | [diff] [blame] | 15 | |
| 16 | "v.io/x/ref/internal/logger" |
Todd Wang | b351149 | 2015-04-07 23:32:34 -0700 | [diff] [blame] | 17 | vsecurity "v.io/x/ref/lib/security" |
Cosmos Nicolaou | bbae388 | 2014-10-02 22:58:19 -0700 | [diff] [blame] | 18 | ) |
| 19 | |
Bogdan Caprita | 490a451 | 2014-11-20 21:12:19 -0800 | [diff] [blame] | 20 | func newLogfile(prefix, name string) (*os.File, error) { |
| 21 | nameHash := adler32.Checksum([]byte(name)) |
Robin Thellend | 1c8a828 | 2014-12-09 10:38:36 -0800 | [diff] [blame] | 22 | f, err := ioutil.TempFile("", fmt.Sprintf("__modules__%s-%x-", prefix, nameHash)) |
Cosmos Nicolaou | bbae388 | 2014-10-02 22:58:19 -0700 | [diff] [blame] | 23 | if err != nil { |
| 24 | return nil, err |
| 25 | } |
| 26 | return f, nil |
| 27 | } |
| 28 | |
Bogdan Caprita | 490a451 | 2014-11-20 21:12:19 -0800 | [diff] [blame] | 29 | func outputFromFile(f *os.File, out io.Writer) { |
| 30 | f.Close() |
| 31 | fName := f.Name() |
| 32 | defer os.Remove(fName) |
| 33 | if out == nil { |
Cosmos Nicolaou | bbae388 | 2014-10-02 22:58:19 -0700 | [diff] [blame] | 34 | return |
| 35 | } |
Bogdan Caprita | 490a451 | 2014-11-20 21:12:19 -0800 | [diff] [blame] | 36 | var err error |
| 37 | if f, err = os.Open(fName); err != nil { |
Cosmos Nicolaou | e3b1932 | 2015-06-18 16:05:08 -0700 | [diff] [blame] | 38 | logger.Global().VI(1).Infof("failed to open %q: %s\n", fName, err) |
Bogdan Caprita | 490a451 | 2014-11-20 21:12:19 -0800 | [diff] [blame] | 39 | return |
Cosmos Nicolaou | bbae388 | 2014-10-02 22:58:19 -0700 | [diff] [blame] | 40 | } |
Bogdan Caprita | 490a451 | 2014-11-20 21:12:19 -0800 | [diff] [blame] | 41 | io.Copy(out, f) |
| 42 | f.Close() |
Cosmos Nicolaou | bbae388 | 2014-10-02 22:58:19 -0700 | [diff] [blame] | 43 | } |
Cosmos Nicolaou | 2cb05fb | 2014-10-23 13:37:32 -0700 | [diff] [blame] | 44 | |
Ankur | 9f95794 | 2014-11-24 16:34:18 -0800 | [diff] [blame] | 45 | func principalFromDir(dir string) (security.Principal, error) { |
| 46 | p, err := vsecurity.LoadPersistentPrincipal(dir, nil) |
| 47 | if err == nil { |
| 48 | return p, nil |
| 49 | } |
| 50 | if !os.IsNotExist(err) { |
| 51 | return nil, err |
| 52 | } |
| 53 | p, err = vsecurity.CreatePersistentPrincipal(dir, nil) |
| 54 | if err != nil { |
| 55 | return nil, err |
| 56 | } |
| 57 | if err := vsecurity.InitDefaultBlessings(p, shellBlessingExtension); err != nil { |
| 58 | return nil, err |
| 59 | } |
| 60 | return p, nil |
| 61 | } |