blob: 25d23a56d9518d58af3c72984413254074d37919 [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.18"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Crashpad: crashpad::UnixCredentialSocket Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="crashpad_doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">Crashpad
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.18 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="namespacecrashpad.html">crashpad</a></li><li class="navelem"><a class="el" href="classcrashpad_1_1UnixCredentialSocket.html">UnixCredentialSocket</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#pub-static-methods">Static Public Member Functions</a> &#124;
<a href="#pub-static-attribs">Static Public Attributes</a> &#124;
<a href="classcrashpad_1_1UnixCredentialSocket-members.html">List of all members</a> </div>
<div class="headertitle">
<div class="title">crashpad::UnixCredentialSocket Class Reference</div> </div>
</div><!--header-->
<div class="contents">
<p>Utilities for communicating over <code>SO_PASSCRED</code> enabled <code>AF_UNIX</code> sockets.
<a href="classcrashpad_1_1UnixCredentialSocket.html#details">More...</a></p>
<p><code>#include &quot;util/linux/socket.h&quot;</code></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
Static Public Member Functions</h2></td></tr>
<tr class="memitem:ae0e7fbb81386fd931b726cdc8b3dcd67"><td class="memItemLeft" align="right" valign="top">static bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrashpad_1_1UnixCredentialSocket.html#ae0e7fbb81386fd931b726cdc8b3dcd67">CreateCredentialSocketpair</a> (<a class="el" href="namespacecrashpad.html#a9daa1b956487883acd9f43d13cc77339">ScopedFileHandle</a> *s1, <a class="el" href="namespacecrashpad.html#a9daa1b956487883acd9f43d13cc77339">ScopedFileHandle</a> *s2)</td></tr>
<tr class="memdesc:ae0e7fbb81386fd931b726cdc8b3dcd67"><td class="mdescLeft">&#160;</td><td class="mdescRight">Creates an <code>AF_UNIX</code> family socket pair with <code>SO_PASSCRED</code> set on each socket. <a href="classcrashpad_1_1UnixCredentialSocket.html#ae0e7fbb81386fd931b726cdc8b3dcd67">More...</a><br /></td></tr>
<tr class="separator:ae0e7fbb81386fd931b726cdc8b3dcd67"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab3302ffd19db7a36305ca7faaa42fd8d"><td class="memItemLeft" align="right" valign="top">static int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrashpad_1_1UnixCredentialSocket.html#ab3302ffd19db7a36305ca7faaa42fd8d">SendMsg</a> (int fd, const void *buf, size_t buf_size, const int *fds=nullptr, size_t fd_count=0)</td></tr>
<tr class="memdesc:ab3302ffd19db7a36305ca7faaa42fd8d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Wraps <code>sendmsg()</code> to send a message with file descriptors. <a href="classcrashpad_1_1UnixCredentialSocket.html#ab3302ffd19db7a36305ca7faaa42fd8d">More...</a><br /></td></tr>
<tr class="separator:ab3302ffd19db7a36305ca7faaa42fd8d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a260be0d64a8fffb4db714db955478644"><td class="memItemLeft" align="right" valign="top">static bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrashpad_1_1UnixCredentialSocket.html#a260be0d64a8fffb4db714db955478644">RecvMsg</a> (int fd, void *buf, size_t buf_size, ucred *creds, std::vector&lt; <a class="el" href="namespacecrashpad.html#a9daa1b956487883acd9f43d13cc77339">ScopedFileHandle</a> &gt; *fds=nullptr)</td></tr>
<tr class="memdesc:a260be0d64a8fffb4db714db955478644"><td class="mdescLeft">&#160;</td><td class="mdescRight">Wraps <code>recvmsg()</code> to receive a message with file descriptors and credentials. <a href="classcrashpad_1_1UnixCredentialSocket.html#a260be0d64a8fffb4db714db955478644">More...</a><br /></td></tr>
<tr class="separator:a260be0d64a8fffb4db714db955478644"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
Static Public Attributes</h2></td></tr>
<tr class="memitem:a099a647659ffb43515e8e5802de3a6c0"><td class="memItemLeft" align="right" valign="top"><a id="a099a647659ffb43515e8e5802de3a6c0"></a>
static const size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcrashpad_1_1UnixCredentialSocket.html#a099a647659ffb43515e8e5802de3a6c0">kMaxSendRecvMsgFDs</a> = 4</td></tr>
<tr class="memdesc:a099a647659ffb43515e8e5802de3a6c0"><td class="mdescLeft">&#160;</td><td class="mdescRight">The maximum number of file descriptors that may be sent/received with <code><a class="el" href="classcrashpad_1_1UnixCredentialSocket.html#ab3302ffd19db7a36305ca7faaa42fd8d" title="Wraps sendmsg() to send a message with file descriptors.">SendMsg()</a></code> or <code><a class="el" href="classcrashpad_1_1UnixCredentialSocket.html#a260be0d64a8fffb4db714db955478644" title="Wraps recvmsg() to receive a message with file descriptors and credentials.">RecvMsg()</a></code>. <br /></td></tr>
<tr class="separator:a099a647659ffb43515e8e5802de3a6c0"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Utilities for communicating over <code>SO_PASSCRED</code> enabled <code>AF_UNIX</code> sockets. </p>
</div><h2 class="groupheader">Member Function Documentation</h2>
<a id="ae0e7fbb81386fd931b726cdc8b3dcd67"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae0e7fbb81386fd931b726cdc8b3dcd67">&#9670;&nbsp;</a></span>CreateCredentialSocketpair()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool crashpad::UnixCredentialSocket::CreateCredentialSocketpair </td>
<td>(</td>
<td class="paramtype"><a class="el" href="namespacecrashpad.html#a9daa1b956487883acd9f43d13cc77339">ScopedFileHandle</a> *&#160;</td>
<td class="paramname"><em>s1</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="namespacecrashpad.html#a9daa1b956487883acd9f43d13cc77339">ScopedFileHandle</a> *&#160;</td>
<td class="paramname"><em>s2</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Creates an <code>AF_UNIX</code> family socket pair with <code>SO_PASSCRED</code> set on each socket. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[out]</td><td class="paramname">s1</td><td>One end of the connected pair. </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">s2</td><td>The other end of the connected pair. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><code>true</code> on success. Otherwise, <code>false</code> with a message logged. </dd></dl>
</div>
</div>
<a id="a260be0d64a8fffb4db714db955478644"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a260be0d64a8fffb4db714db955478644">&#9670;&nbsp;</a></span>RecvMsg()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">bool crashpad::UnixCredentialSocket::RecvMsg </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>fd</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">void *&#160;</td>
<td class="paramname"><em>buf</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>buf_size</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">ucred *&#160;</td>
<td class="paramname"><em>creds</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">std::vector&lt; <a class="el" href="namespacecrashpad.html#a9daa1b956487883acd9f43d13cc77339">ScopedFileHandle</a> &gt; *&#160;</td>
<td class="paramname"><em>fds</em> = <code>nullptr</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Wraps <code>recvmsg()</code> to receive a message with file descriptors and credentials. </p>
<p>This function is intended to be used with <code>AF_UNIX</code> family sockets. Up to <code>kMaxSendRecvMsgFDs</code> file descriptors may be received (via <code>SCM_RIGHTS</code>). The socket must have <code>SO_PASSCRED</code> set.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">fd</td><td>The file descriptor to receive the message on. </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">buf</td><td>The buffer to fill with the message. </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">buf_size</td><td>The size of the message. </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">creds</td><td>The credentials of the sender. </td></tr>
<tr><td class="paramdir">[out]</td><td class="paramname">fds</td><td>The recieved file descriptors. Optional. If <code>nullptr</code>, all received file descriptors will be closed. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd><code>true</code> on success. Otherwise, <code>false</code>, with a message logged. No message will be logged if the message was detected to be an EOF condition triggered by all clients disconnecting. This case is indistinguishable from misuses of this interface that haven't set <code>SO_PASSCRED</code> on <em>fd</em>. </dd></dl>
</div>
</div>
<a id="ab3302ffd19db7a36305ca7faaa42fd8d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab3302ffd19db7a36305ca7faaa42fd8d">&#9670;&nbsp;</a></span>SendMsg()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">int crashpad::UnixCredentialSocket::SendMsg </td>
<td>(</td>
<td class="paramtype">int&#160;</td>
<td class="paramname"><em>fd</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const void *&#160;</td>
<td class="paramname"><em>buf</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>buf_size</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">const int *&#160;</td>
<td class="paramname"><em>fds</em> = <code>nullptr</code>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype">size_t&#160;</td>
<td class="paramname"><em>fd_count</em> = <code>0</code>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Wraps <code>sendmsg()</code> to send a message with file descriptors. </p>
<p>This function is intended for use with <code>AF_UNIX</code> family sockets and passes file descriptors with <code>SCM_RIGHTS</code>.</p>
<p>This function may be used in a compromised context.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramdir">[in]</td><td class="paramname">fd</td><td>The file descriptor to write the message to. </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">buf</td><td>The buffer containing the message. </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">buf_size</td><td>The size of the message. </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">fds</td><td>An array of at most <code>kMaxSendRecvMsgFDs</code> file descriptors. Optional. </td></tr>
<tr><td class="paramdir">[in]</td><td class="paramname">fd_count</td><td>The number of file descriptors in <em>fds</em>. Required only if <em>fds</em> was set. </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>0 on success or an error code on failure. </dd></dl>
</div>
</div>
<hr/>The documentation for this class was generated from the following files:<ul>
<li>util/linux/socket.h</li>
<li>util/linux/socket.cc</li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.18
</small></address>
</body>
</html>