blob: 5e32400ef7aedd8801ce2f1829d55a234c86da72 [file] [log] [blame]
Elly Jonesa44d22d2012-01-05 18:05:56 -05001// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
Elly Jonese7cb5b32011-12-01 14:18:32 -05002// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "process_with_id.h"
6
7#include <fcntl.h>
8#include <unistd.h>
9
Ben Chan9953a592014-02-05 23:32:00 -080010#include <base/strings/string_number_conversions.h>
Elly Jonese7cb5b32011-12-01 14:18:32 -050011
12namespace debugd {
13
14ProcessWithId::ProcessWithId() { }
15
16bool ProcessWithId::Init() {
Elly Fong-Jonesd9a16cd2012-11-12 16:09:49 -050017 return SandboxedProcess::Init() && generate_id();
Elly Jonese7cb5b32011-12-01 14:18:32 -050018}
19
20bool ProcessWithId::generate_id() {
21 char buf[16];
22 FILE *urandom = fopen("/dev/urandom", "r");
23 if (!urandom) {
24 PLOG(ERROR) << "Can't open /dev/urandom";
25 return false;
26 }
27 if (fread(&buf, sizeof(buf), 1, urandom) != 1) {
28 PLOG(ERROR) << "Can't read";
29 fclose(urandom);
30 return false;
31 }
32
33 id_ = base::HexEncode(buf, sizeof(buf));
34 fclose(urandom);
35 return true;
36}
37
38}; // namespace debugd