blob: 3469fbd16bc804b4278b5fb199b7a8b0a9430371 [file] [log] [blame]
Jiri Simsad7616c92015-03-24 23:44:30 -07001// 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 Nicolaoubbae3882014-10-02 22:58:19 -07005package modules
6
7import (
Cosmos Nicolaoubbae3882014-10-02 22:58:19 -07008 "fmt"
Bogdan Caprita490a4512014-11-20 21:12:19 -08009 "hash/adler32"
Cosmos Nicolaoubbae3882014-10-02 22:58:19 -070010 "io"
11 "io/ioutil"
12 "os"
Bogdan Caprita490a4512014-11-20 21:12:19 -080013
Jiri Simsa6ac95222015-02-23 16:11:49 -080014 "v.io/v23/security"
Cosmos Nicolaoue3b19322015-06-18 16:05:08 -070015
16 "v.io/x/ref/internal/logger"
Todd Wangb3511492015-04-07 23:32:34 -070017 vsecurity "v.io/x/ref/lib/security"
Cosmos Nicolaoubbae3882014-10-02 22:58:19 -070018)
19
Bogdan Caprita490a4512014-11-20 21:12:19 -080020func newLogfile(prefix, name string) (*os.File, error) {
21 nameHash := adler32.Checksum([]byte(name))
Robin Thellend1c8a8282014-12-09 10:38:36 -080022 f, err := ioutil.TempFile("", fmt.Sprintf("__modules__%s-%x-", prefix, nameHash))
Cosmos Nicolaoubbae3882014-10-02 22:58:19 -070023 if err != nil {
24 return nil, err
25 }
26 return f, nil
27}
28
Bogdan Caprita490a4512014-11-20 21:12:19 -080029func outputFromFile(f *os.File, out io.Writer) {
30 f.Close()
31 fName := f.Name()
32 defer os.Remove(fName)
33 if out == nil {
Cosmos Nicolaoubbae3882014-10-02 22:58:19 -070034 return
35 }
Bogdan Caprita490a4512014-11-20 21:12:19 -080036 var err error
37 if f, err = os.Open(fName); err != nil {
Cosmos Nicolaoue3b19322015-06-18 16:05:08 -070038 logger.Global().VI(1).Infof("failed to open %q: %s\n", fName, err)
Bogdan Caprita490a4512014-11-20 21:12:19 -080039 return
Cosmos Nicolaoubbae3882014-10-02 22:58:19 -070040 }
Bogdan Caprita490a4512014-11-20 21:12:19 -080041 io.Copy(out, f)
42 f.Close()
Cosmos Nicolaoubbae3882014-10-02 22:58:19 -070043}
Cosmos Nicolaou2cb05fb2014-10-23 13:37:32 -070044
Ankur9f957942014-11-24 16:34:18 -080045func 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}