~ubuntu-branches/ubuntu/oneiric/curl/oneiric-security

« back to all changes in this revision

Viewing changes to src/xattr.c

  • Committer: Bazaar Package Importer
  • Author(s): Artur Rona
  • Date: 2011-01-26 02:50:18 UTC
  • mfrom: (3.4.13 sid)
  • Revision ID: james.westby@ubuntu.com-20110126025018-dzgm2m2t5d1vc9y4
Tags: 7.21.3-1ubuntu1
* Merge from debian unstable.  Remaining changes: (LP: #707756)
  - debian/control:
    + Build-Depends: Replace libssh2-1-dev with openssh-server.
      Drop stunnel since it's in universe, as well.
    + Drop libssh2-1-dev from libcurl4-openssl-dev's Depends.
    Above changes are necessary to be independent from the universe.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/***************************************************************************
 
2
 *                                  _   _ ____  _
 
3
 *  Project                     ___| | | |  _ \| |
 
4
 *                             / __| | | | |_) | |
 
5
 *                            | (__| |_| |  _ <| |___
 
6
 *                             \___|\___/|_| \_\_____|
 
7
 *
 
8
 * Copyright (C) 2010, Daniel Stenberg, <daniel@haxx.se>, et al.
 
9
 *
 
10
 * This software is licensed as described in the file COPYING, which
 
11
 * you should have received as part of this distribution. The terms
 
12
 * are also available at http://curl.haxx.se/docs/copyright.html.
 
13
 *
 
14
 * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 
15
 * copies of the Software, and permit persons to whom the Software is
 
16
 * furnished to do so, under the terms of the COPYING file.
 
17
 *
 
18
 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 
19
 * KIND, either express or implied.
 
20
 *
 
21
 ***************************************************************************/
 
22
 
 
23
/* client-local setup.h */
 
24
#include "setup.h"
 
25
#include <curl/curl.h>
 
26
#include "xattr.h"
 
27
 
 
28
#ifdef HAVE_FSETXATTR
 
29
#include <sys/types.h>
 
30
#include <string.h>
 
31
#include <sys/xattr.h> /* include header from libc, not from libattr */
 
32
 
 
33
/* mapping table of curl metadata to extended attribute names */
 
34
static const struct xattr_mapping {
 
35
  const char *attr; /* name of the xattr */
 
36
  CURLINFO info;
 
37
} mappings[] = {
 
38
  /* mappings proposed by
 
39
   * http://freedesktop.org/wiki/CommonExtendedAttributes
 
40
   */
 
41
  { "user.xdg.origin.url", CURLINFO_EFFECTIVE_URL },
 
42
  { "user.mime_type", CURLINFO_CONTENT_TYPE },
 
43
  { NULL, CURLINFO_NONE } /* last element, abort loop here */
 
44
};
 
45
 
 
46
/* store metadata from the curl request alongside the downloaded
 
47
 * file using extended attributes
 
48
 */
 
49
int fwrite_xattr(CURL *curl, int fd)
 
50
{
 
51
  int i = 0;
 
52
  int err = 0;
 
53
  /* loop through all xattr-curlinfo pairs and abort on a set error */
 
54
  while ( err == 0 && mappings[i].attr != NULL ) {
 
55
    char *value = NULL;
 
56
    CURLcode rc = curl_easy_getinfo(curl, mappings[i].info, &value);
 
57
    if ( rc == CURLE_OK && value ) {
 
58
#ifdef HAVE_FSETXATTR_6
 
59
      err = fsetxattr( fd, mappings[i].attr, value, strlen(value), 0, 0 );
 
60
#elif defined(HAVE_FSETXATTR_5)
 
61
      err = fsetxattr( fd, mappings[i].attr, value, strlen(value), 0 );
 
62
#endif
 
63
    }
 
64
    i++;
 
65
  }
 
66
  return err;
 
67
}
 
68
#else
 
69
int fwrite_xattr(CURL *curl, int fd)
 
70
{
 
71
  (void)curl;
 
72
  (void)fd;
 
73
  return 0;
 
74
}
 
75
#endif